coolblue: Letzte Zeilen einer sehr großen Datei auslesen

Beitrag lesen

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_!!!_