linux - 在 Linux 中部分展开 VCF bgz 文件
问题描述
我已经从 - https://gnomad.broadinstitute.org/downloads下载了 gnomAD 文件
这是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 文件?
解决方案
据我所知,bgz
文件与 兼容gzip
,VCF
文件是纯文本文件。由于它是一个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 实用程序来以这种方式解析其他文件,则可以从命令行轻松解析这三个输入参数。
推荐阅读
- asp.net-core - SignalR - .Net Core 3 HubContext
- xamarin - Xamarin - 在 MAC 上安装 13.16.0.13 时出现问题
- c++ - 为什么g ++编译的代码会超出堆栈指针?
- python-3.x - 如何从 DB 烧瓶中获取列表
- javascript - 从反应函数返回 HTML
- django - django 开发人员如何判断哪个代码更好用
- javascript - Reactjs 中的高级设计问题:在发送到后端之前在组件之间传递上传文件数据
- php - 尝试比较数据库和 php 文件中的值
- javascript - 在另一个 td 孩子的表中查找 td
- excel - 如果单元格值 = Peter 则停止并重新开始串联