如何在命令行中打印 gz 压缩文件的最后一行?

Jur*_*ocs 15 linux ubuntu command

我有很多具有通用名称的 gz 压缩日志文件,我需要检查它们反映的时间段。我知道zcat | head 但这仅适用于文件的开头。

如何在不解压缩整个文件的情况下只获取最后一行?

Dav*_*man 22

如果您想要来自文件尾端而不是头端的行,请使用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
Run Code Online (Sandbox Code Playgroud)

  • @Jurudocs 不幸的是,我认为这是不可能的。gzip 是一种流压缩机制,它通常要求您从流的开头开始任何解压缩。您不能只是跳到文件的中间并从那里开始。 (4认同)
  • 这有效!谢谢。但是 5GB 压缩日志文件需要很长时间(1 分钟)。你知道更有效的方法吗? (3认同)
  • @SridharSarnobat:那么也许最简单和最快的是使用文件的最后修改日期? (2认同)

cir*_*eos 5

FWIW:我开发了一个命令行工具,它可以-t在 gzip 文件 ( -T) 增长时生成尾部 ( ) 甚至连续尾部。(许多其他选项可用):https : //github.com/circulosmeos/gztool

所以对于你的情况: $ gztool -t myfile.gz | tail -1

请注意,对于这些操作中的任何一个,gztool都会创建一个与该操作交错的小 (<1%/gzip) 索引文件。这样做的好处是该文件上的所有下一个“尾部”或提取将几乎不消耗时间/CPU,因为文件不会再次完全解压缩!