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)
上一篇 2025年6月2日 下午7:01
下一篇 2025年6月2日 下午7:22


相关推荐

  • 多场景解锁OpenClaw:从Lighthouse部署到IM办公全流程提效

    多场景解锁OpenClaw:从Lighthouse部署到IM办公全流程提效

    2026年3月13日
    3
  • crond和crontab详解

    crond和crontab详解一 crontab 是什么 crond 是 linux 下用来周期性的执行某种任务或等待处理某些事件的一个守护进程 与 windows 下的计划任务类似 当安装完成操作系统后 默认会安装此服务工具 并且会自动启动 crond 进程 crond 进程每分钟会定期检查是否有要执行的任务 如果有要执行的任务 则自动执行该任务 Linux 下的任务调度分为两类 系统任务调度和用户任务调度 系统任务调度 系统周期性所

    2026年3月19日
    2
  • JAVA 程序员cursor 和idea 结合编程

    JAVA 程序员cursor 和idea 结合编程

    2026年3月16日
    2
  • 双模sa_七句话讲清NSA单模与SA+NSA双模5G手机的真实区别

    双模sa_七句话讲清NSA单模与SA+NSA双模5G手机的真实区别部分 5G 手机可能有网没信号 正确的理解应该是这样的 一 为何有双模 5G 全网通手机与单模 5G 手机的区别 1 目前在售的 5G 手机 包括仅支持 NSA 组网的高通 X50 平台 也就是所有非华为系的手机品牌的那些 5G 手机 与同时支持 NSA 与 SA 的海思麒麟 985 与麒麟 9905G 两个平台 即华为 荣耀 华为 Nova 的那些 5G 手机 这也是为何目前在售的 5G 智能手机 的宣传文案上 出现华为使用 5G 双模全网通

    2026年3月17日
    2
  • 剑指Offer面试题:5.重建二叉树

    一题目:重建二叉树二思路先根据前序遍历序列的第一个数字创建根结点,接下来在中序遍历序列中找到根结点的位置,这样就能确定左、右子树结点的数量。在前序遍历和中序遍历的序列中划分了左、右子树结点的值

    2021年12月19日
    55
  • 最短路径-Floyd算法的matlab实现.md「建议收藏」

    最短路径-Floyd算法的matlab实现.md「建议收藏」最短路径-Floyd算法的matlab实现​ 弗洛伊德算法是解决任意两点间的最短路径的一种算法,可以正确处理有向图或有向图或负权(但不可存在负权回路)的最短路径问题。​ 在Floyd算法中一般有两个矩阵,一个距离矩阵D,一个路由矩阵R,其中距离矩阵用于存储任意两点之间的最短距离,而路由矩阵则记录任意两点之间的最短路径信息。其思想是:如果可以从一个点进行中转,就进行比较从这个点中转和不中转的距…

    2022年6月22日
    146

发表回复

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

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