Wie druckt man die letzte Zeile einer komprimierten GZ-Datei in der Befehlszeile?

Wie druckt man die letzte Zeile einer komprimierten GZ-Datei in der Befehlszeile?

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 tailstattdessen 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 -teiner GZIP-Datei ein Ende () oder sogar ein kontinuierliches Ende ( ) erstellen kann. (Viele andere Optionen verfügbar):-Thttps://github.com/circulosmeos/gztool

Also für Ihren Fall: $ gztool -t myfile.gz | tail -1

Beachten Sie, dass für jede dieser Aktionen gztooleine 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!

verwandte Informationen