我有一个.bz2
文件。我想列出第一行或最后10行而不解压缩,因为它太大了。我尝试了head -10
或tail -10
,但我看到了胡言乱语。我还需要比较两个压缩文件,以检查它们是否相似。如何在不解压缩文件的情况下实现这一目标?
编辑:类似意味着相同(具有相同的内容)。
答案 0 :(得分:8)
虽然bzip2
是基于块的压缩算法,但理论上你可以只找到你要解压缩的特定块,这会很复杂(例如,如果最后十个你最终想要看到的行实际上跨越了两个或更多个压缩块?)。
要回答您的直接问题,您可以这样做,实际上解压缩整个文件,因此在某种意义上是浪费,但它并没有尝试将该文件存储在任何地方,所以你不要遇到存储容量问题:
bzcat file.bz2 | head -10
bzcat file.bz2 | tail -10
如果您的发行版不包含bzcat
(根据我的经验会有点不寻常),bzcat
相当于bzip2 -d -c
。
但是,如果您的最终目标是比较两个压缩文件(可能已在不同级别压缩,因此直接比较实际压缩文件不起作用),您可以这样做(假设{{1作为你的shell):
bash
这将解压缩两个文件并逐字节地比较未压缩的数据,而不会将任何解压缩的文件存储在任何地方。
答案 1 :(得分:0)
普通标准bunzip2
命令无法执行此操作。但是,手册页说bzip2工作在900 KB的块中,并提到bzip2recover
这是一个可以解压缩单个块的程序。
使用这些知识,您应该能够将所需文件中的第一个和最后一个900 KB(左右)的内容放在一起,然后使用bzip2recover解压缩它们。