shell高级技巧:提取vcf文件中一个contig

shell高级技巧:提取vcf文件中一个contig这是一个很小众的需求 大部分变异检测都是基于组装质量比较高的基因组 而不是那种初步拼接的 contig 由于初步拼接的参考序列通常会有成千上万个 contig 序列 也就导致在 VCF 的头文件的 contig ID xxx length xxx 部分会有成千上万个 contig 将这个文件加载到 IGV 时 IGV 会去解析 VCF 这将会是非常缓慢的过程 最好的策略就是只提取其 ID xxx length xxx

这是一个很小众的需求。大部分变异检测都是基于组装质量比较高的基因组,而不是那种初步拼接的contig。

由于初步拼接的参考序列通常会有成千上万个contig序列,也就导致在VCF的头文件的contig=<ID=xxx,length=xxx>部分会有成千上万个contig,将这个文件加载到IGV时, IGV会去解析VCF,这将会是非常缓慢的过程,最好的策略就是只提取其中一个contig查看。

一开始,我想到的是这个方法,直接用bcftools去提取目标contig

bcftools view some_variants.bcf contig_1 

但是,你会发现HEADER部分还是会保留原来的信息。怎么办呢?

我们这里会用到一个Shell高级技巧–subshell。举个例子,比如说同时查看一个文件的头10行和后10行.

(head -n 10 ; tail -n10 ) < ~/referece/annotaiton/TAIR10/TAIR10_GFF3_genes.bed 

这里的()就是一个subshell, 它的作用就是同时执行()中的所有命令。

用到此处,就是同时完成提取VCF的header部分并只保留目标contig和提取目标区间的所有记录这两个任务,然后保存为vcf.gz格式。

(bcftools view -h some_variants.bcf | grep -v "contig" | sed "/^reference/a $(bcftools view -h some_variants.bcf | grep -w "ID=contig_1")" ; bcftools view -H some_variants.bcf contig_1 ) | bcftools view -Oz -o contig_1.vcf.gz 

上面是一个非常复杂的shell命令,希望你能看懂。

这里面重复出现了两个变量,一个是some_variants.bcf,一个是contig_1, 我们可以将其用$1$2代替,然后添加到你的~/.bashrc中,如下所示

# function subvcf() { (bcftools view -h $1 | grep -v "contig" | sed "/^reference/a $(bcftools view -h $1| grep -w "ID=$2")" ; bcftools view -H $1 $2 ) | bcftools view -Oz -o $2.vcf.gz && bcftoos index $2.vcf.gz } 

最后用source ~/.bashrc添加刚才的函数到环境变量中,最后就是subvcf some_variants.bcf contig_1 代替之前的长串命令。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/234014.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 彻底卸载Symantec Endpoint Protection之另类办法「建议收藏」

    彻底卸载Symantec Endpoint Protection之另类办法「建议收藏」诺顿卸载需要输入密码,网上一篇文章说终结进程的办法不适合v11,机器是单位的,所以开始并没有想到完全卸载,怕起不来,于是进入安全模式禁用所有服务,下个卡巴斯基安装,结果一安装,卡巴斯基就提示先卸载诺顿,太可爱了,点击确认之后,卸载之后再重启就卸得干干净净了,装上卡巴斯基,好几天也没死一次机,而以前一天要死一两次,诺顿真垃圾,而且卸载也卸不干净。卡巴斯基还有这个妙用啊,即使你不想安卡巴斯基,也可以用它来删诺顿,而且不用输密码,强。

    2022年5月27日
    63
  • vuejs — 父组件向子组件传值(父传子)「建议收藏」

    vuejs — 父组件向子组件传值(父传子)「建议收藏」来看一下vue中的父组件向子组件传值的过程:首先,举个例子:有子组件—-A.vueB.vueC.vueA.vue中有一个数组-》listArr,这个数组在B.vue和C.vue中也要用到,每个页面都去写listArr数组,比较麻烦那怎么用简单…

    2022年5月11日
    52
  • 二分图匹配相关算法

    二分图匹配相关算法二分图匈牙利算法二分图匈牙利算法二分图匈牙利算法这里简单记录下二分图匹配的相关算法 供自己使用 如果各位游客看到觉得浪费时间 便请移步 文章全为个人模板记录匈牙利算法匈牙利算法研究的是二分图的最大匹配 是对给定的二分图求得最大的满足条件的匹配数 匹配对 其算法思想是利用 Berge 定理和 Hall 定理将初始匹配通过迭代寻找增广路径得到最大匹配 每次迭代得到的匹配大小加 1 具体迭代实现有 DFS

    2025年12月15日
    5
  • 电子灌封胶是什么材料_灌封胶

    电子灌封胶是什么材料_灌封胶关注+星标公众号,不错过精彩内容来源|芯片之家一、什么是灌封?灌封(灌胶)就是将聚氨酯灌封胶、有机硅灌封胶、环氧树脂灌封胶用设备或手工方式灌入装有电子元件、线路的器件内,在常温或加热条…

    2022年10月2日
    6
  • Ubuntu中dpkg命令「建议收藏」

    Ubuntu中dpkg命令「建议收藏」语法   dpkg(选项)(参数)选项   -i         安装软件包;   -r         删除软件包;   -P         删除软件包的同时删除其配置文件;   -L         显示于软件包关联的文件;   -l         显示已安装软件包列表;   –unpack      解开软件包;   -c    …

    2022年5月22日
    54
  • redhat忘记root密码的解决办法_grub修改root密码

    redhat忘记root密码的解决办法_grub修改root密码转于lee的http://hi.baidu.com/maozilee/item/12a62a76f371df2bd7a89c5dRedFlagLinux忘记root密码解决办法Linux忘记root密码解决办法(进入Linux单用户系统修复模式)1.用RedFlag标准安装盘启动系统见http://blog.sina.com.cn/s/blog_8e5b82670101

    2022年8月20日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号