5 초마다 로그를 생성하는 응용 프로그램이 있습니다. 로그는 아래 형식입니다. 내가 CSV 형식 아래에 이러한 변환하기 위해 노력하고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...
:
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";
}
펄을 사용하여이 작업을 수행하는 방법이 있나요 : I 출력을 읽고 헤더가 만들려고 무슨
?
코드에 어떤 문제가 있습니까? 읽기 루프 반복마다 추가 출력 파일을 열어야합니까? – runrig
특정 문제가 무엇인가요? File :: Tail 또는 프로그램의 다른 부분으로 문제를 줄일 수 있습니까? –