1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
sub byfilename { if($a =~ /detail$/) { return 1; } if($b =~ /detail$/) { return -1; } $a =~ m/(\d+)/; $na = $1; $b =~ m/(\d+)/; $nb = $1; $na <=> $nb; }
@dateien = sort byfilename </var/log/radius/detail*>;
@dateien = map { /\.(bz2)$/ ? "bzcat $_ |" : $_ } @dateien;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
### filehandle = openfile( filename ) sub openfile { my $filename = shift; if ( $filename =~ m{\.bz2\z} ) { open my $fh, '-|', "bzcat $filename" or die "bzcat $filename: $!\n"; } elsif ( $filename =~ m{\.gz\z} ) { open my $fh, '-|', "zcat $filename" or die "zcat $filename: $!\n"; } else { open my $fh, '<', $filename or die "open $filename: $!\n"; } return $fh; }
2011-08-05T09:02:00 LinuxerHi,
ich mach das bei einem meiner Logparser (sinngemäß) nach diesem Schema (ungetestet aus der Erinnerung):
Code (perl): (dl )1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16### filehandle = openfile( filename ) sub openfile { my $filename = shift; if ( $filename =~ m{\.bz2\z} ) { open my $fh, '-|', "bzcat $filename" or die "bzcat $filename: $!\n"; } elsif ( $filename =~ m{\.gz\z} ) { open my $fh, '-|', "zcat $filename" or die "zcat $filename: $!\n"; } else { open my $fh, '<', $filename or die "open $filename: $!\n"; } return $fh; }
2011-08-05T09:29:23 GwenDragonEs bestände auch die Möglichkeit ohne bunzip2 auszukommen.
MitCompress::Bzip2 lassen sich auch die komprimierten Dateien lesen.
In jedem Fall muss nixht extra eine Pipe über die Shell aufgemacht werden.
Oder hast du genügend Speicher für Prozesse?