Linux

如何在命令行列印gz壓縮文件的最後一行?

  • March 2, 2021

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

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

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

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

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

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

引用自:https://serverfault.com/questions/927956