温馨提示:本文翻译自stackoverflow.com,查看原文请点击:bash - How to delete the first line from a gzip file without decompressing?
bash gzip

bash - 如何从gzip文件中删除第一行而不进行解压缩?

发布于 2020-05-17 05:54:37

我有一个大gzip文件,解压缩速度很慢。如何在不解压缩整个文件的情况下就地删除第一行?

查看更多

提问者
Jase
被浏览
9
Yunnosch 2020-02-28 17:33

Zip算法使用已解压缩的内容作为以下内容的查找表。我认为,这直接意味着如果删除第一行,它肯定需要重新压缩文件的其余部分,这又意味着需要先将其解压缩。

因此,我相信答案是:不是。

在实际实现zip算法(准确地说是Lempel Ziv压缩算法)的细节中,您会发现存在某些大小的数据窗口。
可以解压缩的即将到来数据的最大长度取决于窗口大小“ ahead”。在已解压缩的数据(“后退”窗口)中,还有一个最大距离可以将数据用作查找。
因此,有可能仅解压缩一部分压缩数据,其大小足以确保其余的压缩数据在其之前不引用任何内容。即是如此之大,以至于压缩数据中的某个点不再存在要删除的引用。然后,您可以重新压缩该部分,而无需删除第一行。

但是,我相信这种方法是您无法解决的。否则,您将提供更多的信息。

所以我想我会坚持:不。

或者至少:
您必须真正了解Zip算法,以至于您可以自己实施它。然后,在要处理的文件中进一步了解算法的精确实现。然后了解正在查看的压缩的精确配置(两个窗口的大小)。
然后花很多力气。

深入了解如何做到这一点超出了这里的答案。