Hallo,
ich möchte gerne die letzten 160 Zeilen einer sehr großen Datei auslesen. Die Datei ist ca. 140 MB groß. Bisher bin ich wie folgt vorgegangen:
-----------------------------------------------
open(DATEI,"<$datei") or die "Can't open $datei!\n";
my $i;
for($i=0 ; <DATEI> ; $i++) {} #Zeilen zählen
close DATEI;
$i-=160; #die besagten 160 Zeilen abziehen
my $n=0;
my @data;
open(DATEI,"<$datei") or die "Can't open $datei!\n";
for(my $s=0 ; <DATEI> ; $s++) {
if($s >= $i) { #Zeilen ab $i-160 einlesen
$data[$n]="$_";
$n++;
}
}
close DATEI;
-----------------------------------------------
Gibt es eine bessere Möglichkeit, die vorallem effizienter ist? Ich habe zuerst an tail -160 gedacht, möchte aber keine Subshell aufmachen. Gibt es hierfür Perl interne Mittel?
Wäre
for(my $s=0 ; <DATEI> ; $s++) {
next if $s < $i;
$data[$n]="$_";
$n++;
}
das Gleiche, nur eine andere Schreibweise, oder auf jeden Fall schon mal besser als das obere Beispiel?
Viele Grüße,
coolblue
never say oops after you submitted a job :-)
_der_Ton_macht_die_Musik_!!!_