我有一個應用程序每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