Rufen Sie die Protokolle der letzten 100 Zeilen ab


163

Ich muss die letzten 100 Protokollzeilen aus der Protokolldatei abrufen. Ich habe den Befehl sed ausprobiert

sed -n -e '100,$p' logfilename

Bitte lassen Sie mich wissen, wie ich diesen Befehl ändern kann, um die letzten 100 Zeilen gezielt abzurufen .


Dies wird im Handbuch erwähnt: gnu.org/software/sed/manual/html_node/tail.html#tail , wie sed Tail emulieren kann.
Lars Fischer

1
tail -f -n 100 logfilename
Amitesh Bharti

Antworten:


300

Sie können den Befehl tail wie folgt verwenden:

tail -100 <log file>   > newLogfile

Jetzt sind die letzten 100 Zeilen in vorhanden newLogfile

BEARBEITEN:

Neuere Versionen von tail, wie von twalberg erwähnt, verwenden den Befehl:

tail -n 100 <log file>   > newLogfile

17
Beachten Sie, dass einige neuere Versionen von taildie Syntax erfordern tail -n 100 <filename>...
Twalberg

14

Schauen Sie sich das sed-Skript an, das die 100 letzten Zeilen druckt, die Sie in der Dokumentation zu sed finden ( https://www.gnu.org/software/sed/manual/sed.html#tail ):

$ cat sed.cmd
1! {; H; g; }
1,100 !s/[^\n]*\n//
$p

$ sed -nf sed.cmd logfilename

Für mich ist es viel schwieriger als Ihr Skript

tail -n 100 logfilename

ist viel viel einfacher. Und es ist sehr effizient, es liest nicht alle Dateien, wenn es nicht notwendig ist. Siehe meine Antwort mit Strace-Bericht für tail ./huge-file: /unix/102905/does-tail-read-the-whole-file/102910#102910


13

"tail" ist ein Befehl zum Anzeigen des letzten Teils einer Datei. Die Verwendung der richtigen verfügbaren Schalter hilft uns, eine spezifischere Ausgabe zu erhalten. Der für mich am häufigsten verwendete Schalter ist -n und -f

ZUSAMMENFASSUNG

Schwanz [-F | -f | -r] [-q] [-b Nummer | -c Nummer | -n Nummer] [Datei ...]

Hier

-n Nummer: Der Ort ist Zahlenzeilen.

-f: Die Option -f bewirkt, dass der Schwanz nicht stoppt, wenn das Dateiende erreicht ist, sondern darauf wartet, dass zusätzliche Daten an die Eingabe angehängt werden. Die Option -f wird ignoriert, wenn die Standardeingabe eine Pipe ist, nicht jedoch, wenn es sich um einen FIFO handelt.

Rufen Sie die Protokolle der letzten 100 Zeilen ab

To get last static 100 lines  
     tail -n 100 <file path>

To get real time last 100 lines
     tail -f -n 100 <file path>

3

Ich weiß, das ist sehr alt, aber für wen auch immer es hilft.

less +F my_log_file.log

Das ist einfach, mit weniger kann man viel mächtigere Dinge tun. Sobald Sie Protokolle sehen, können Sie suchen, zur Zeilennummer gehen, nach Mustern suchen und vieles mehr. Außerdem ist dies bei großen Dateien schneller.

es ist wie vim für Protokolle [total meine Meinung]

Dokumentation des Originals Less: https://linux.die.net/man/1/less

weniger Cheatsheet: https://gist.github.com/glnds/8862214


1
len=`cat filename | wc -l`
len=$(( $len + 1 ))
l=$(( $len - 99 ))
sed -n "${l},${len}p" filename

Die erste Zeile nimmt die Länge (Gesamtzahl der Zeilen) der Datei an, dann +1 in der Gesamtzahl der Zeilen. Danach müssen wir 100 Datensätze abfangen, also -99 von der Gesamtlänge. Fügen Sie dann einfach die Variablen in den Befehl sed ein, um die letzten 100 Zeilen aus der Datei abzurufen

Ich hoffe, dies wird dir helfen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.