如何在命令行中打印 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!

相关内容