Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在linux中列出文件中的前10行或后10行而不进行解压缩_Linux - Fatal编程技术网

如何在linux中列出文件中的前10行或后10行而不进行解压缩

如何在linux中列出文件中的前10行或后10行而不进行解压缩,linux,Linux,我有一个.bz2文件。我想列出的第一个或最后10行没有解压缩,因为它太大了。我试过head-10或tail-10,但我看到了胡言乱语。我还需要比较两个压缩文件,以检查它们是否相似。如何在不解压缩文件的情况下实现这一点 编辑:相似意味着相同(具有相同的内容)。普通标准命令无法执行此操作。然而,手册页上说bzip2在900kb的块中工作,并提到哪个程序可以解压单个块 利用这些知识,您应该能够将从所需文件中截取第一个和最后一个900 KB(约)的内容组合在一起,然后使用bzip2recover对其进行

我有一个
.bz2
文件。我想列出的第一个或最后10行没有解压缩,因为它太大了。我试过
head-10
tail-10
,但我看到了胡言乱语。我还需要比较两个压缩文件,以检查它们是否相似。如何在不解压缩文件的情况下实现这一点

编辑:相似意味着相同(具有相同的内容)。

普通标准命令无法执行此操作。然而,手册页上说bzip2在900kb的块中工作,并提到哪个程序可以解压单个块


利用这些知识,您应该能够将从所需文件中截取第一个和最后一个900 KB(约)的内容组合在一起,然后使用bzip2recover对其进行解压缩。

而bzip2是一种基于块的压缩算法,因此从理论上讲,您可以找到要解压缩的特定块,这会很复杂(例如,如果您最终想要看到的最后十行实际上跨越了两个或更多压缩块怎么办?)

要回答您眼前的问题,您可以这样做,这实际上会解压缩整个文件,因此在某种意义上是浪费,但它不会尝试将该文件存储在任何位置,因此您不会遇到存储容量问题:

bzcat file.bz2 | head -10
bzcat file.bz2 | tail -10
如果您的发行版不包括
bzcat
(这在我的经验中有点不寻常),
bzcat
相当于
bzip2-d-c

但是,如果您的最终目标是比较两个压缩文件(可能已在不同级别进行了压缩,因此直接比较实际的压缩文件不起作用),您可以这样做(假设
bash
作为shell):


cmp你所说的相似是什么意思?BZ2是一种基于块的格式,因此可以只解压缩文件的一小部分而不读取整个文件。要比较两个压缩文件,您可能会在本页上找到一些内容,尽管问题确实特别要求
.zip
文件…:文件必须解压缩。我想你实际上问的是“不必保存解压缩文件的副本”。问题是,根据最初压缩文件的参数,块大小高达原始未压缩数据的900KB。如何对应压缩文件中的位置是高度依赖于数据的,很难预测。
bzcat | head
不会解压缩整个文件。当
head
终止时,它关闭管道并
bzcat
获取一个
SIGPIPE
bzcat | tail
将解压整个文件。
cmp <(bzcat file1.bz2) <(bzcat file2.bz2)