如何在不读取其全部内容的情况下缩小压缩文件?

我想模仿gzcat |的function 尾巴

这对于有大文件(几GB左右)的时候会有帮助。 我能不能从头开始读这样一个文件的最后几行? 我怀疑这是不可能的,因为我猜gzip,编码将取决于所有以前的文本。

但是我还是想听听有没有人尝试过类似的方法 – 也许是通过一种可以提供这种function的压缩algorithm进行研究。

不,你不能。 压缩algorithm在stream上工作,并根据stream所包含的内部编码来实现其高压缩比。

如果不知道在某一点之前stream的内容是什么,就不可能知道如何去解压。

任何允许您解压缩任意部分的algorithm都需要对数据进行多次传递才能对其进行压缩。

BGZF用于创build由Samtools创build的索引gzip压缩BAM文件。 这些是随机访问的。

http://samtools.sourceforge.net/

如果你可以控制文件的内容,那么如果它是一个ZIP文件,你可以按照数字顺序存储预定大小的文件名,然后解压缩最后一个文件/文件。

如果这是一个选项,那么bzip2可能是一个更好的压缩algorithm用于这个目的。

Bzip2使用块压缩scheme。 因此,如果你把文件的结尾大部分放在最后,那么你可以用bzip2recover来恢复它。

在写入文件时块大小是可选的。 事实上,当将-1(或–fast)设置为-9(或–best)作为压缩选项时,会发生这种情况,对应的块大小为100k到900k。 默认值是900k。

bzip2命令行工具不给你一个友好的方式来做到这一点与stream水线,但是然后给bzip2是不是stream导向,也许这并不奇怪。

zindex以时间和空间高效的方式创build并查询压缩的基于行的文本文件上的索引。

https://github.com/mattgodbolt/zindex