
Ich habe viele gz-komprimierte Protokolldateien mit generischen Namen und muss den Zeitraum überprüfen, den sie widerspiegeln. Ich kenne zcat | head, aber das funktioniert nur für den Anfang der Datei.
Wie kann ich nur die letzte Zeile abrufen, ohne die gesamte Datei zu dekomprimieren?
Antwort1
Wenn Sie Zeilen vom Ende einer Datei statt vom Kopfende wünschen, verwenden Sie tail
stattdessen head
:
$ zcat /var/log/syslog.2.gz | tail -1
Aug 24 07:09:02 myhost rsyslogd: [origin software="rsyslogd" swVersion="8.4.2" x-pid="796" x-info="http://www.rsyslog.com"] rsyslogd was HUPed
Antwort2
FWIW: Ich habe ein Befehlszeilentool entwickelt, das beim Wachsen
-t
einer GZIP-Datei ein Ende () oder sogar ein kontinuierliches Ende ( ) erstellen kann. (Viele andere Optionen verfügbar):-T
https://github.com/circulosmeos/gztool
Also für Ihren Fall:
$ gztool -t myfile.gz | tail -1
Beachten Sie, dass für jede dieser Aktionen gztool
eine kleine (<1 %/gzip) Indexdatei erstellt wird, die mit dieser Aktion verschachtelt ist.Der Vorteil hiervon besteht darin, dass alle nachfolgenden „Tails“ oder Extraktionen dieser Datei fast keine Zeit/CPU verbrauchen, da die Datei nicht erneut vollständig dekomprimiert wird!