我有一个应用程序每5秒产生一个日志。日志格式如下。如何在Perl中读取持续更新的日志文件?
11:13:49.250,interface,0,RX,0
11:13:49.250,interface,0,TX,0
11:13:49.250,interface,1,close,0
11:13:49.250,interface,4,error,593
11:13:49.250,interface,4,idle,2994215
and so on for other interfaces...
我正在努力将这些转换为下面的CSV格式:
Time,interface.RX,interface.TX,interface.close....
11:13:49,0,0,0,....
这么简单的,但现在的问题是,我必须尽快获得CSV格式的数据线上,即日志文件更新的CSV也应该更新。
我试图读取输出,使标题是:
#!/usr/bin/perl -w
use strict;
use File::Tail;
my $head=["Time"];
my $pos={};
my $last_pos=0;
my $current_event=[];
my $events=[];
my $file = shift;
$file = File::Tail->new($file);
while(defined($_=$file->read)) {
next if $_ =~ some filters;
my ($time,$interface,$count,$eve,$value) = split /[,\n]/, $_;
my $key = $interface.".".$eve;
if (not defined $pos->{$eve_key}) {
$last_pos+=1;
$pos->{$eve_key}=$last_pos;
push @$head,$eve;
}
print join(",", @$head) . "\n";
}
有没有办法做到这一点使用Perl?
你的代码有什么问题?你可能需要打开一个输出文件来追加读取循环的每一次迭代? – runrig 2010-05-14 15:18:12
具体问题是什么?你能把它简化为File :: Tail或程序的其他部分吗? – 2010-05-14 23:26:05