我在文本文件中有一个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
无论如何这样做? 谢谢。
答案 0 :(得分:5)
有几个步骤可以解决此问题。我将不只是将答案交给您,而是要逐步介绍这些步骤,并为您提供一些可在每个阶段帮助您的功能的文档。
open()
函数用于打开文件并将该文件附加到 filehandle ,您可以使用该文件柄从文件中读取数据。< ... >
)。split()
函数。join()
。print()
来做到这一点。close()
相同。我故意遗漏了您的问题的一个有趣的角落。每个人都需要一个肉类问题才能进入牙齿,对吗? :-)
可以根据这些信息编写一些东西,如果您有更多问题,请随时在这里提问。
答案 1 :(得分:0)
这样的作品可以吗?
use strict;
use warnings;
open my $fh, '<', 'text.txt';
open my $fo, '>', 'text.csv';
while (<$fh>) {
s/^\s+//;
s/\b \b/_/g;
my $text = (join ',', (split /\s+/, $_))."\n";
print $fo $text;
}