记录—提取合并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文件相关推荐

  1. 实操 | 合并VCF文件的几种方法及注意事项

    背 景 在基因组分析领域的很多不同场景中,需要合并VCF文件. VCF文件.简单来说,就是记录样本基因型的文件.但多数VCF文件不只记录了基因型,也包含有关该基因型的来源的细节. 其它文件.VCF文件 ...

  2. bcftools合并vcf文件

    见命令: bcftools merge A.vcf.gz B.vcf.gz C.vcf.gz -Oz -o ABC.vcf.gz 参考链接:http://vcftools.sourceforge.ne ...

  3. 2021.06.08|提取、比较各样品vcf文件中snp突变频率

    目录 摘要 环境与方法 使用代码 分析结果 总结 摘要 接到一个wgs项目,要帮助客户统计vcf文件中snp突变频率,比较两个样品的突变位点.这个工作在上一个项目中是手动处理的,当时参考序列短,突变位 ...

  4. python 知乎 合并 pdf_实例4:用Python提取不同PDF文件中的页面合并进新的PDF文件...

    公司船务部一个重要任务就是需要准备每单货物的发票,从系统导出发票时是默认存为一个PDF文档,在打印的时候,有多少个文件,就需要点多少次"打印".如果能够将当天的发票PDF档合并在一 ...

  5. python提取文本中的手机号_Python从vcf文件中读取手机号并进行去重操作

    文章目录 1. Python代码 file = open('test.vcf', 'r', encoding='utf-8') tels = [] for line in file: line = l ...

  6. R语言丨根据VCF文件自动填充对其变异位点并生成序列fa文件

    根据VCF文件自动填充对其变异位点并生成序列fa文件 首先提出一个问题: 假如有一个重测序结果VCF文件,里面包含了很多个样本在几百个突变位点(snp和iad)的基因型数据,现在想根据这份原始数据,得 ...

  7. gvcf文件与vcf文件

    gvcf文件与vcf文件都是vcf文件,不同之处在于gvcf文件会记录更多的信息,这里更多的信息指的是未突变的位点的覆盖情况,从下面的图我们可以直观的看出两者的区别 可以看到,gvcf文件也分两种,一 ...

  8. R语言丨根据VCF文件设计引物,自动识别两样本差异SNP位点,调用samtools获取上下游参考序列

    根据变异位点设计引物序列 今天碰到一个新问题:假如有一个vcf文件储存了两个样品的变异位点基因型数据,每行代表一个位点,我现在想找出两样本差异的SNP位点,再把差异位点用[REF/ALT]的形式表示, ...

  9. IVs提取合并工具ivstools

    IVs提取合并工具ivstools IV是WEP加密算法的初始化向量.WEP使用IV和密钥对网络数据进行加密.由于算法存在漏洞,安全人员只要收集到足够的IVs,就可以破解WEP的密码.aircrack ...

  10. 页面加载速度-合并资源文件

    前言 一直觉得自己的博客站点页面加载很慢, 就想着去优化一下. 呐, 下图是一次文章页面的加载, 需要2.5s. 其中 js 文件就有18个. 众所周知, 浏览器对资源文件的并行下载数量是有限制的(不 ...

最新文章

  1. 我的世界java版怎么打不开_JAVA版我的世界打不开,求助!
  2. 阿里云存储_OSS对象存储
  3. quartz配置_基于spring-boot 2.x +quartz 的CRUD任务管理系统
  4. php ci oracle,CI连接Oracle 11G数据库
  5. 初学ArcGIS API for JavaScript
  6. Silverlight 中datagrid控件-- 通过设置数据虚拟化加速显示
  7. 6、控件样式模板和使用
  8. php与rest的关系,PHP与节点REST-API
  9. Samba简单应用案例
  10. javascript实现简体与繁体的转换(可下载)
  11. python 安装包国内源
  12. 使用IDM的正确姿势
  13. 如何使用计算机讲解ppt,如何录制PPT讲解视频?
  14. 学生评语管理系统软件测试,学校教师老师综合评价评分系统软件
  15. python优化网站_小旋风网站优化 - 致力于Python高品质站群系统的产品研发
  16. shell 修改文件格式
  17. 如何使用Element-UI?
  18. 计算机专业答辩开场白,计算机专业论文答辩开场白范文
  19. 《可转债入门十讲》笔记
  20. 个人博客园样式、背景及细节美化过程

热门文章

  1. win10服务器系统要设置要密码是什么,云服务器win10系统初始密码
  2. 自己用命令强制删除占用的文件或文件夹
  3. RichText widgets require a Directionality widget ancestor.
  4. STM32 ESP8266 无线模块使用
  5. sql 错误码 备用
  6. Arm linux开发板移植OpenSSH
  7. Java - Timestamp cannot be cast to String
  8. 网站文章如何被快速收录,网站文章快速收录的方法!
  9. 数据库实验四--源码
  10. electron-vue中调用系统屏幕键盘(linux与windows)