<分区>
我有一个 .bz2
文件。我想列出前 10 行或最后 10 行而不解压缩,因为它太大了。我尝试了 head -10
或 tail -10
但我看到了乱码。我还需要比较两个压缩文件以检查它们是否相似。如何在不解压缩文件的情况下实现这一目标?
编辑:相似意味着相同(具有相同的内容)。
标签 linux
<分区>
我有一个 .bz2
文件。我想列出前 10 行或最后 10 行而不解压缩,因为它太大了。我尝试了 head -10
或 tail -10
但我看到了乱码。我还需要比较两个压缩文件以检查它们是否相似。如何在不解压缩文件的情况下实现这一目标?
编辑:相似意味着相同(具有相同的内容)。
最佳答案
虽然 bzip2
是一种基于 block 的压缩算法,所以理论上您可以只找到您想要解压缩的特定 block ,但这会很复杂(例如,如果您最终希望看到的最后十行实际上跨越了两个或更多个压缩 block ?)。
要回答您的直接问题,您可以这样做,它实际上解压缩了整个文件,所以在某种意义上是浪费,但它不会尝试将该文件存储在任何地方,因此您不会遇到存储容量问题:
bzcat file.bz2 | head -10
bzcat file.bz2 | tail -10
如果您的发行版不包含 bzcat
(根据我的经验,这有点不寻常),bzcat
等同于 bzip2 -d -c
.
但是,如果您的最终目标是比较两个压缩文件(可能已在不同级别压缩,因此直接比较实际的压缩文件是行不通的),您可以这样做(假设 bash
作为你的 shell):
cmp <(bzcat file1.bz2) <(bzcat file2.bz2)
这将解压缩两个文件并逐字节比较未压缩的数据,而不会在任何地方存储任何一个解压缩的文件。
关于linux - 如何在 linux 中不解压文件的情况下列出文件的前 10 行或后 10 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14774401/