首页 > 解决方案 > 在 Linux 中部分展开 VCF bgz 文件

问题描述

我已经从 - 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

解决方案


据我所知,bgz文件与 兼容gzipVCF文件是纯文本文件。由于它是一个gzip文件,而不是一个.tar.gz.,因此该解决方案不需要列出任何存档内容,并且稍微简化了一些事情。

这可能可以通过多种方式完成,我怀疑这是最好的方式,但是我已经能够使用以下代码成功地将前 100,000 行解压缩到一个文件中python3(它也应该在早期版本下工作回到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 实用程序来以这种方式解析其他文件,则可以从命令行轻松解析这三个输入参数。


推荐阅读