linux - 如何在 linux 中不解压文件的情况下列出文件的前 10 行或后 10 行

标签 linux

<分区>

我有一个 .bz2 文件。我想列出前 10 行或最后 10 行而不解压缩,因为它太大了。我尝试了 head -10tail -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/

相关文章:

c++ - 是否有任何标准方法可以在 Linux 上使用 C++ 从文件加载参数?

linux - 在宏 + linux 系统调用 (nasm) 中定义标签

PHP 在 Postgresql 服务器之间以不同方式解释字符串

linux - vsftp虚拟用户设置配置

Python:解析 iwlist wlan0 扫描输出并通过 Linux tty 发送

c++ - 使用 istream 从命名管道读取

linux - 增量备份tar错误

linux - 将编译标志附加到 Linux 内核构建

java - 功能与 Linux 和 Java

c - 如何在 Linux 中使用 C 通过串行端口连接发送 .gif 文件