如何在命令列中列印gz壓縮檔案的最後一行?

如何在命令列中列印gz壓縮檔案的最後一行?

我有很多具有通用名稱的 gz 壓縮日誌文件,我需要檢查它們反映的時間段。我知道zcat | head 但這僅適用於檔案的開頭。

如何在不解壓整個文件的情況下只獲取最後一行?

答案1

如果您想要來自文件尾部而不是頭端的行,請使用tail而不是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

答案2

FWIW:我開發了一個命令列工具,可以在 gzip 檔案增長時產生尾部 ( -t) 甚至連續的尾部 ( ) 。 -T(許多其他選項可用): https://github.com/circulosmeos/gztool

所以對於你的情況: $ gztool -t myfile.gz | tail -1

請注意,對於任何這些操作都gztool將建立一個與該操作交錯的小索引檔案 (<1%/gzip)。這樣做的優點是該檔案的所有下一個“尾部”或提取幾乎不會消耗時間/CPU,因為檔案不會再次完全解壓縮!

相關內容