记录---提取合并VCF文件
记录—提取合并VCF文件
最近有个需求,需要合并两个VCF集合,两个文件中材料名完全不同,SNP名部分相同,想要合并为相同SNP下不同Sample的一个VCF文件。
整体思路是:
(1)找到两个VCF文件的共有SNP
(2)合并两个VCF文件(SNP相同,Sample列不同)
0. 简化GATK结果生成的VCF文件
生成的GATK的VCF文件中包含很多信息,文件特别大,想要简化一下,保留基因型信息,剔除不想要的信息:
import os,sysinf=sys.argv[1] # input file
ouf=sys.argv[2] # output filewith open(inf) as infile, open(ouf,"w") as oufile:for line in infile:if line.startswith("##fileformat"):oufile.write(line)elif line.startswith("#CHROM"):oufile.write(line)else:num=["Chr"+str(i) for i in list(range(1,11))]a=line.strip().split()if a[0] in num:gt=list(map(lambda x: x.split(":")[0], a[9:]))oufile.write("%s\t%s\t%s\t%s\t%s\t%s\n"\%(a[0],a[1],"S"+a[0]+"_"+a[1], "\t".join(a[3:7] + ["."]),"GT","\t".join(gt) ))
1. 两个VCF基因集合的操作和合并
一个VCF的SNP数据是自测序结果(A.vcf),另一个是下载的HapMap数据结果(B.vcf)。因为A1的SNP数量少,所以提取A的SNP作为参考,通过VCFtools提取B.vcf,再将结果的SNP提取出来:
(1)第一步先使用grep和awk等提取A.vcf中的SNP(A.vcf标记少)
grep -v "#" A.vcf | cut -f 3 > A.vcf.snps.txt
(2)第二步利用上面的SNP去提取B.vcf,再次提取共有SNP文件
vcftools --vcf B.vcf --snps \./A.vcf.snps.txt --recode -c | \grep -v "#"| cut -f 3 > A.overlap.B.snps.txt
(3)第三步使用第二步产生的SNP再次过滤A.vcf和B.vcf
vcftools --vcf A.vcf \--snps A.overlap.B.snps.txt \--recode --out A.overlap.keepvcftools --vcf B.vcf \--snps A.overlap.B.snps.txt \--recode --out B.overlap.keep
(4) 第四步合并两个vcf文件
此脚本使用时,注意两个vcf的行数相同
,列中Sample不同
,要合并。
VCFtools据说也能做,我用的时候出现问题,所以使用下面的脚本:
#!/usr/bin/env python
import os,sys
inf1=sys.argv[1] # sequenced res
inf2=sys.argv[2] # cau hapmap res
ouf=sys.argv[3] # resultswith open(inf1) as infile1, open(inf2) as infile2, open(ouf,"w") as oufile:line1=infile1.readline() ## get first line as default valueline2=infile2.readline()while line1 != "" and line2 != "": if line1.startswith("##fileformat"):oufile.write(line1)line1=infile1.readline() ## iterate next lineline2=infile2.readline()elif line1.startswith("#CHROM"):a=line1.strip()b=line2.strip().split()bb="\t".join(b[9:])oufile.write(a+"\t"+bb+"\n")line1=infile1.readline() ## iterate next lineline2=infile2.readline()else: line1=infile1.readline() ## iterate next lineline2=infile2.readline()#breaka=line1.strip().split()b=line2.strip().split()if a != [] and b != [] and a[3]==b[3]:if a[4]==b[4]:res= a + b[9:]oufile.write("%s\n"%("\t".join(res)))else:continue ## skip the Alt multiple code situationsres= a[:4] + [a[4] + ";" + b[4]] + a[5:] + b[9:]oufile.write("%s\n"%("\t".join(res)))print("Well Done !!")
2. VCF文件的文件头(VCF Header)
通常VCF文件的Header中包含了VCF中注释的信息,为了VCFtools识别且方便合并,我们仅仅使用两行作为表头即可,这样既可以识别VCF文件类型,也保存了Sample的样本信息,足够后面的使用了。
##fileformat=VCFv4.1
#CHROM ...
以上,仅为个人记录。
记录---提取合并VCF文件相关推荐
- 实操 | 合并VCF文件的几种方法及注意事项
背 景 在基因组分析领域的很多不同场景中,需要合并VCF文件. VCF文件.简单来说,就是记录样本基因型的文件.但多数VCF文件不只记录了基因型,也包含有关该基因型的来源的细节. 其它文件.VCF文件 ...
- bcftools合并vcf文件
见命令: bcftools merge A.vcf.gz B.vcf.gz C.vcf.gz -Oz -o ABC.vcf.gz 参考链接:http://vcftools.sourceforge.ne ...
- 2021.06.08|提取、比较各样品vcf文件中snp突变频率
目录 摘要 环境与方法 使用代码 分析结果 总结 摘要 接到一个wgs项目,要帮助客户统计vcf文件中snp突变频率,比较两个样品的突变位点.这个工作在上一个项目中是手动处理的,当时参考序列短,突变位 ...
- python 知乎 合并 pdf_实例4:用Python提取不同PDF文件中的页面合并进新的PDF文件...
公司船务部一个重要任务就是需要准备每单货物的发票,从系统导出发票时是默认存为一个PDF文档,在打印的时候,有多少个文件,就需要点多少次"打印".如果能够将当天的发票PDF档合并在一 ...
- python提取文本中的手机号_Python从vcf文件中读取手机号并进行去重操作
文章目录 1. Python代码 file = open('test.vcf', 'r', encoding='utf-8') tels = [] for line in file: line = l ...
- R语言丨根据VCF文件自动填充对其变异位点并生成序列fa文件
根据VCF文件自动填充对其变异位点并生成序列fa文件 首先提出一个问题: 假如有一个重测序结果VCF文件,里面包含了很多个样本在几百个突变位点(snp和iad)的基因型数据,现在想根据这份原始数据,得 ...
- gvcf文件与vcf文件
gvcf文件与vcf文件都是vcf文件,不同之处在于gvcf文件会记录更多的信息,这里更多的信息指的是未突变的位点的覆盖情况,从下面的图我们可以直观的看出两者的区别 可以看到,gvcf文件也分两种,一 ...
- R语言丨根据VCF文件设计引物,自动识别两样本差异SNP位点,调用samtools获取上下游参考序列
根据变异位点设计引物序列 今天碰到一个新问题:假如有一个vcf文件储存了两个样品的变异位点基因型数据,每行代表一个位点,我现在想找出两样本差异的SNP位点,再把差异位点用[REF/ALT]的形式表示, ...
- IVs提取合并工具ivstools
IVs提取合并工具ivstools IV是WEP加密算法的初始化向量.WEP使用IV和密钥对网络数据进行加密.由于算法存在漏洞,安全人员只要收集到足够的IVs,就可以破解WEP的密码.aircrack ...
- 页面加载速度-合并资源文件
前言 一直觉得自己的博客站点页面加载很慢, 就想着去优化一下. 呐, 下图是一次文章页面的加载, 需要2.5s. 其中 js 文件就有18个. 众所周知, 浏览器对资源文件的并行下载数量是有限制的(不 ...
最新文章
- 我的世界java版怎么打不开_JAVA版我的世界打不开,求助!
- 阿里云存储_OSS对象存储
- quartz配置_基于spring-boot 2.x +quartz 的CRUD任务管理系统
- php ci oracle,CI连接Oracle 11G数据库
- 初学ArcGIS API for JavaScript
- Silverlight 中datagrid控件-- 通过设置数据虚拟化加速显示
- 6、控件样式模板和使用
- php与rest的关系,PHP与节点REST-API
- Samba简单应用案例
- javascript实现简体与繁体的转换(可下载)
- python 安装包国内源
- 使用IDM的正确姿势
- 如何使用计算机讲解ppt,如何录制PPT讲解视频?
- 学生评语管理系统软件测试,学校教师老师综合评价评分系统软件
- python优化网站_小旋风网站优化 - 致力于Python高品质站群系统的产品研发
- shell 修改文件格式
- 如何使用Element-UI?
- 计算机专业答辩开场白,计算机专业论文答辩开场白范文
- 《可转债入门十讲》笔记
- 个人博客园样式、背景及细节美化过程