在Linux中部分扩展VCF bgz文件

问题描述 投票:-1回答:1

我已经从-https://gnomad.broadinstitute.org/downloads下载了gnomAD文件

这是bgz文件

https://storage.googleapis.com/gnomad-public/release/2.1.1/vcf/genomes/gnomad.genomes.r2.1.1.sites.2.vcf.bgz

当我使用扩展时:

zcat gnomad.genomes.r2.1.1.sites.2.vcf.bgz > gnomad.genomes.r2.1.1.sites.2.vcf

输出的VCF文件超过330GB。我的笔记本电脑上没有可用的空间。

有没有一种我可以扩展的方式-比如说1 GB的bgz文件或仅100000行来自bgz文件?

linux
1个回答
1
投票

根据我的判断,bgz文件与gzip兼容,VCF文件是纯文本文件。由于它是一个gzip文件,而不是.tar.gz,所以该解决方案不需要列出任何存档内容,并且可以简化一些事情。

这可能可以通过多种方式完成,我怀疑这是最好的方式,但是我已经能够使用python3中的以下代码成功地将前100,000行解压缩到文件中(它也可以在较早的版本回到2.7):

#!/usr/bin/env python3
import gzip
ifile = gzip.GzipFile("gnomad.genomes.r2.1.1.sites.2.vcf.bgz")
ofile = open("truncated.vcf", "wb")
LINES_TO_EXTRACT = 100000

for line in range(LINES_TO_EXTRACT):
    ofile.write(ifile.readline())

ifile.close()
ofile.close()

我在您的示例文件中尝试过此操作,而截断后的文件约为1.4 GiB。在类似树莓派的计算机上花费了大约1分钟40秒,因此虽然速度很慢,但并非如此。

虽然此解决方案速度较慢,但​​由于以下原因,它对您的应用程序有好处:

  • 它最大程度地减少了磁盘和内存的使用,否则对于像这样的大文件可能会出现问题。

  • 它将文件精确地剪切到给定的行数,这避免了将输出文件中途截断。

  • 如果要制作一个小型的CLI实用程序以这种方式解析其他文件,可以从命令行轻松解析这三个输入参数。

© www.soinside.com 2019 - 2024. All rights reserved.