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

bas*_*kin 40 compression algorithm

我想模仿gzcat的功能 尾巴-n.

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

但是我还是想听听是否有人尝试过类似的事情 - 也许是通过可以提供这种功能的压缩算法进行调查.

Ben*_*n S 40

不,你不能.该荏苒算法适用于流和调整其内部值编码到什么流包含实现它的高压缩比.

如果不知道流的内容在某一点之前是什么,就不可能知道如何从那一点开始解压缩.

任何允许您对其任意部分进行解压缩的算法都需要对数据进行多次传递以对其进行压缩.

  • 这只是部分正确,取决于文件的构造方式.gzip文件可以包含多个流,后者完全独立于前者.您可以将gzip文件连接在一起,并且仍然具有有效的gzip文件.我不知道细节,但我认为可以找到最后一次重置流的位置,假设写入流的任何内容都经常重启. (7认同)

Jer*_*zig 8

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

http://samtools.sourceforge.net/

  • BGZF 文件允许访问特殊构造的 gzip 中的随机字节偏移,首先限制块大小,然后将每个块的长度存储在 BC 标头(gzip 忽略)中,以允许在不解压缩的情况下进行随机访问。BAM 等工具通过存储块开始的偏移量以及块内的偏移量来存储偏移量。要获得面向行的索引,您需要诸如随附的 bai 或 tabix 文件(尽管这些是格式和基因组特定的)之类的东西,以便从您想要的行映射到偏移量。 (2认同)