在压缩文件上使用 `tac`

在压缩文件上使用 `tac`

tac unzipped.log | grep -m1 pattern工作得很好,但我无法tac在压缩文件上使用该命令。

tac zipped.gz | zgrep -m1 pattern什么也不返回。

有什么办法可以tac在不解压我的文件的情况下使用吗?

答案1

gzip 作为从第一个字节到最后一个字节的流进行操作;你不能从中间开始减压。大多数压缩工具都会这样做,因为如果您允许从中间解压缩,那么您就无法充分利用开头和结尾之间的相似性。因此,要在 gzip 压缩文件中搜索字符串,您无论如何都需要解压缩整个文件(如果您只对第一个匹配项感兴趣,至少要解压到第一个匹配项)。

此外,tac会反转行,而不是字节。由于解压缩的文件不分为行(它们是二进制文件,其中换行符与其他文件一样是一个字节),因此这会将文件弄乱成无法使用的内容。

您可以反转解压后的文件:

zcat zipped.gz | tac | grep -m1 pattern 

然而,这不一定比搜索整个文件更快,因为tac它本身并不那么快(大多数应用程序从头到尾读取,因此内核倾向于优化这种情况,然后tac必须测试每个字节以查看它是否是换行符)。如果您只想要最后一行,则可以将其提取:

zcat zipped.gz | grep pattern | tail -n1

相关内容