perl -ne 'if ($.<6) {print} else {shift @arr}; push @arr,$_; END {print @arr}' file
perl -e '@a=<>;print splice @a,1,5;print splice @a,-5,5' file
2017-09-28T14:18:00 LinuxerMein Vorschlag msg #187448 sollte RAM-sparsam sein.Kann man schon, man muss sich aber eben der Nebeneffekte klar sein.
Wie schon gesagt, die Datei wird dabei komplett in den Array und damit in den Speicher eingelesen.
Wenn die Datei groß ist und/oder wenig freier Arbeitsspeicher verfügbar ist, dann kann das veranlassen, dass Speicher ausgelagert wird (Swap).
2017-09-28T14:18:00 LinuxerIn einem Einzeiler?Ich würd's mitTie::File oder den von Raubtier erwähnten
File::ReadBackwards oder
File::Tail probieren.
perl -MTie::File -E "tie my @a, 'Tie::File', $ARGV[0]; say @a[0..4]; say @a[-5..-1]" lines.txt
1 2 3 4 5
my $tf = tie my @array, 'Tie::File', "d:/tmp/TieUrlMap.php" or die; for(@array){ my $in = $_ }; print Dumper $tf; # Die ganze Datei liegt in der Instanz
perldoc Tie::FileThe file is not loaded into memory, so this will work even for gigantic files.
2017-09-28T21:54:52 LinuxerEinzeiler hindern doch nicht daran, ein Modul zu verwenden. Wenn sie den Job erledigen können, warum nicht verwenden?
perl -ne '($.<6 and print) or shift @a; push @a,$_; END {print @a}' file
2017-09-28T21:54:52 LinuxerKleiner Verbesserungsvorschlag: nach say jeweils for einfügen, damit die Zeilen auch wirklich zeilenweise ausgegeben werden. (Auch wenn der Einzeiler dadurch noch etwas länger wird.)Code: (dl )perl -MTie::File -E "tie my @a, 'Tie::File', $ARGV[0]; say @a[0..4]; say @a[-5..-1]" lines.txt