需求

客户的一个简单需求:

我有一批功能基因位点,想从重测序的群体材料中找到这些位点,如何批量快速获得?

示例文件

gene.txt

test.vcf

代码实现

run.sh

cat $1 |while read gene chr from to
do
#echo $chr $from $to
if echo $2 |grep -q '.*.vcf.gz$';then
vcftools --gzvcf $2 --chr $chr --from-bp $from --to-bp $to --recode --recode-INFO-all --out $gene.$chr.$from-$to
elif echo $2 |grep -q '.*.vcf$';then
vcftools --vcf $2 --chr $chr --from-bp $from --to-bp $to --recode --recode-INFO-all --out $gene.$chr.$from-$to
fi
done

运行sh run.sh gene.txt test.vcf,或sh run.sh gene.txt test.vcf.gz

生成结果:

补充说明

以上代码中利用了vcftools工具,以及shell中读取每行文件的每个字段进行赋值。

vcftools还能提取某个具体位置的SNP:

vcftools --gzvcf test.vcf.gz --positions specific_position.txt --recode --out specific_position.vcf

specific_position.txt文件格式如下:

1 842013
1 891021
1 903426
1 949654
1 1018704

除了vcftools,bcftools和plink等工具也能实现类似的功能。

bcftools filter test.vcf.gz --regions 9:4700000-4800000 > out.vcf

但bcftools要求vcf必须是gz格式,如不是,则需要进行转化(直接用gzip不行):

bcftools view test.vcf -Oz -o test.vcf.gz
bcftools index test.vcf.gz

需要格外注意的是,vcf中的染色体名称要和提取文件中的染色体名保持一致,如Chr1或chr1或1

或者:

 bcftools view  -S keep.list test.vcf >sub_indv.vcf

keep.list可以是“染色体+具体位置”两列,也可以是“染色体+起始+终止”三列:

chr1    27639
chr1 60383
chr2 60469
chr3 60516
chr4 60534 #或者
chr1  1  1000
chr1  2000  4500

在plink中,可以指定特定的样本(keep)或SNP(extract)。

指定样本提取:

plink --bfile file --noweb --keep sampleID.txt --recode --make-bed --out sample

sampleID.txt第一列为提取的样本Family ID,第二列为Within-family ID(IID)。

指定位点提取:

plink --bfile file --extract snp.txt --make-bed --out snp

snp.txt文件中一个SNP名称一行。

Ref:https://www.cnblogs.com/chenwenyan/p/9151672.html

https://blog.csdn.net/weixin_34387468/article/details/94519445

https://www.cnblogs.com/mmtinfo/p/11945592.html

https://www.cnblogs.com/chenwenyan/p/8991417.html

如何从vcf文件中批量提取一系列基因的SNP位点?的更多相关文章

  1. Alt+Shift+R组合键,用来在一个java文件中批量的重命名变量。

    myeclipse和eclipse集成编译软件,都提供了一个快捷键用来批量重命名变量:Alt+Shift+R组合键,用来在一个java文件中批量的重命名变量.扩展知识:如果想要重命名文件名,又不想手动 ...

  2. Editplus 文件中批量搜索字符串的技巧

    常规情况下,我们利用Crtl+F可以在文档中查找字符串,进行替换等操作. 但要有的时候,我们要在大量文件中做这种查找操作,显然,一个个的打开文档是不现实的. 比如: 最近,谷歌被墙的很厉害,导致很多w ...

  3. python实现将android手机通讯录vcf文件转化为csv

    经常会遇到将手机通讯录导出到电脑并转化为在电脑中可编辑的情况,在网上搜索了很久当前不外乎两种处理方式.1.使用电脑的outlook的通讯簿功能,将手机导出的vcf文件导入到outlook的通讯录中,然 ...

  4. Android vcard使用示例,生成vcf文件

     Android vcard使用示例,生成vcf文件 我们备份手机联系人时,导出到SD卡时,会在SD卡中生成一个vcf文件,用于保存联系人姓名,手机号码. vCard 规范容许公开交换个人数据交换 ( ...

  5. 如何反向推断基因型文件中的参考碱基(REF/ALT)?

    目录 需求 解决 方法一 方法二 需求 客户随手丢来一个基因型文件,类似于hapmap格式,只是少了中间多余的那几列,像这种类hapmap格式文件,往往是芯片数据. 这样的数据因为缺乏等位基因:参考碱 ...

  6. 利用vcftools比较两个vcf文件

    因为最近有一项工作是比较填充准确性的,中间有用到vcftools比较两个vcf文件. 使用命令也很简单: 1 vcftools --vcf file1.snp.vcf --diff file2.snp ...

  7. 嵌入式 H264—MP4格式及在MP4文件中提取H264的SPS、PPS及码流

    一.MP4格式基本概念 MP4格式对应标准MPEG-4标准(ISO/IEC14496) 二.MP4封装格式核心概念 1  MP4封装格式对应标准为 ISO/IEC 14496-12(信息技术 视听对象 ...

  8. 提取PPT文件中的Vba ProjectStg Compressed Atom。Extract PPT VBA Compress Stream

    http://msdn.microsoft.com/en-us/library/cc313106(v=office.12).aspx  微软文档 PartI ********************* ...

  9. 利用ROS工具从bag文件中提取图片

    bag文件是ROS常用的数据存储格式,因此要从bag文件中提取数据就需要了解一点ROS的背景知识. 1. 什么是ROS及其优势 ROS全称Robot Operating System,是BSD-lic ...

随机推荐

  1. Java:并发笔记-02

    Java:并发笔记-02 说明:这是看了 bilibili 上 黑马程序员 的课程 java并发编程 后做的笔记 3. 共享模型之管程-1 本章内容-1 共享问题 synchronized 线程安全分 ...

  2. Beta实际开发与初始计划的比较

    零.说明 本篇博客为Beta阶段开始十天后,实际开发工作与初始计划的比较 截止至本篇博客发布为止,团队所有成员已完成计网考试,将在本周日进行充分的接口测试 一.比较 1.与初始计划对比 初始计划 实际 ...

  3. 2019OO第四单元作业总结&OO课程整体总结

    第四单元作业总结 第四单元的作业主题是UML图的解析,通过对UML图代码的解析,我对UML图的结构以及各种元素之间的关系的理解更加深入了. ------------------------------ ...

  4. Spring父子上下文的使用案例

    Spring父子上下文的使用案例 一.背景 二.需求 三.实现步骤 1.基础代码编写 2.测试结果 四.小彩蛋 五.完整代码 一.背景 最近在看在使用Spring Cloud的时候发现,当我们通过Fe ...

  5. gas-station leetcode C++

    There are N gas stations along a circular route, where the amount of gas at station i isgas[i]. You ...

  6. Spring Cloud Alibaba环境搭建

    前言:Spring Cloud Alibaba是目前主流的分布式微服务架构,本文主要讲解了在IDEA中如何搭建Spring Cloud Alibaba环境,以及介绍Spring Cloud Aliba ...

  7. python编程中的流程控制

    内容概要 成员运算 身份运算 流程控制 详细 1.成员运算 定义:判断某个个体在不在某个群体内 关键词:in(在) /// not in(不在) 例: num_list = [1, 2, 3, 4, ...

  8. Piakchu之RCE漏洞

    一.Ping(远程系统命令执行) 首先正常输入一个ip,查看页面的返回值.发现有乱码,但是能看出执行了ping命令. 查看源代码,可以看到只是对操作系统进行了判断,而对输入内容是否为ip地址并没有判断 ...

  9. Python学习路线【对标大厂Python工程师的招聘要求,并推荐优质免费资源】打卡学习不迷茫

    您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦. 本文要点:从Python爬虫工程师的招聘要求出发制定学习路线,同时还推荐免费优质的学习资源. 打卡学习不迷茫. 干货满满,建议收藏,需要用到时常看 ...

  10. C++ IO基础

    一:c++I/O处理,按照数据输入输出的过程,形象的将其看做流.数据在流中进行传播. 所有的流有两个基类:ios和streambuf类 streambuf:提供对缓冲区的基本操作,设置缓冲区等 ios ...