
我有很多具有通用名稱的 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,因為檔案不會再次完全解壓縮!