У меня есть приложение, генерирующее журналы каждые 5 секунд. Журналы в формате ниже.
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?