如果我理解正确,你有:
file.vcf.gz这是一个 gzip 压缩的 VCF 文件(不是块 gzip 压缩的)你想:
file.vcf.bgz这是一个块 gzip 压缩的 VCF 文件,其内容与file.vcf.gz, 和file.vcf.bgz.tbi 这是一个 tabix 索引 file.vcf.bgz并且您希望在不解压缩的情况下进行此转换。
不幸的是,我不知道无论如何要避免解压缩数据以便以阻塞形式重新压缩它。您可以通过流式传输数据来保持内存成本不变:
gzip --decompress --to-stdout file.vcf.gz \
| bgzip --index --index-name file.vcf.bgz.tbi -@4 \
> file.vcf.bgz
Run Code Online (Sandbox Code Playgroud)
第一行 decompresses file.vcf.gz,将解压后的输出写入标准输出流。第二行 block-gzip 压缩标准输入流(将压缩数据写入标准输出流)并生成一个名为 .zip 的索引文件file.vcf.bgz.tbi。该-@4通知bgzip使用四个线程。如果您的机器有更多内核,您可以增加此值。最后一行将 block-gzip 压缩输出定向到一个名为file.vcf.bgz.
在我的 MacBook Pro 上,这个过程需要一分钟来重新压缩一个 214MB 的文件。
注意:这不会删除file.vcf.gz,如果您不再需要它,您需要自己删除它。