Hi,prinzipiell gibt es mehrere Möglichkeiten. Man könnte erst das ganze File in ein Array einlesen und dann nur die letzten 20 ausgeben, aber bei riesigen Files wäre der Speicherbedarf enorm.
Meine Lösung geht deshalb zeilenweise durch die Datei und hält ein Zeilenfenster mit genau 20 Zeilen vor. Wenn es mehr werden würden, wird automatisch die oberste Zeile entfernt. Beim Ende der Datei hat man dann genau die letzten 20 Zeilen. Voila.
#!/usr/bin/perl -wuse strict;
my $no_of_lines = 20;
my @line_window;
open(IN, '40zeilen') or die "Could not open file: $!";
while (<IN>) {
# erste Zeile entfernen, falls bereits 20 Zeilen im Zeilenfenster sind
shift(@line_window) if scalar @line_window >= $no_of_lines;
# aktuelle Zeile hinten anfuegen
push(@line_window, $_);
}
close IN;
print join('', @line_window);
Gruss,
svenXY
Datum: 07.12.2005-12:58
