【发布时间】:2019-06-04 17:20:12
【问题描述】:
我有一个文本文件中的 netflow 信息报告,我想将它们导出为 csv 格式,我该如何在 Perl 中做到这一点?我是 Perl 新手,刚开始学习它。
这是文本文件:
Duration Flags
10.10.10.1 10.10.11.11 51251 445 2019-03-05 11:59:29.008 29.156 ......
10.10.10.2 10.10.11.22 51234 123 2019-03-05 11:40:29.008 30.156 .A..SF
我想将其导出为excel格式,如下所示。
10.10.10.1,10.10.11.11,51251,445,2019-03-05 11:59:29.008,29.156,......
10.10.10.2,10.10.11.22,51234,123,2019-03-05 11:59:29.008,30.156,.A..SF
我已经尝试做如下,
use strict;
use warnings;
open my $fh, '<', 'file.txt';
open my $fo, '>', 'file.csv';
while (<$fh>) {
next if ($. == 1);
s/\b \b/,/g;
my $text = (join ',', (split /\s+/, $_))."\n";
print $fo $text;
}
但结果是每一行开始都会多加一个',',如下,
,10.10.10.1,10.10.11.11,51251,445,2019-03-05 11:59:29.008,29.156,......
,10.10.10.2,10.10.11.22,51234,123,2019-03-05 11:59:29.008,30.156,.A..SF
这就是我想要的,我的代码有什么问题?
10.10.10.1,10.10.11.11,51251,445,2019-03-05 11:59:29.008,29.156,......
10.10.10.2,10.10.11.22,51234,123,2019-03-05 11:59:29.008,30.156,.A..SF
无论如何要这样做? 谢谢。
【问题讨论】:
-
你试过什么?你有什么问题?请向我们展示您的代码。
-
@georgetovrea 我已经尝试了您编辑中的代码,但我的 csv 中没有第一个逗号。
-
无论如何,如果您跳过第一行
s/\b \b/,/g;是不需要的。您的输入可以在列之前有空格吗? -
@sergiotarxz 我已经推荐了“ s/\b \b/,/g;”这一行,但仍然得到相同的结果。每行开头都是','
-
加s/^\s+//;在拆分/加入之前。 (你得到的结果正是我在每一行输入前加空格时得到的结果)