美文网首页NGS生信科研信息学
VCF文件操作利器bcftools的常用实例

VCF文件操作利器bcftools的常用实例

作者: 生信杂谈 | 来源:发表于2019-06-03 22:24 被阅读25次

    直接来看例子吧。

    1. 左对齐标准化Indel,对于多等位基因位点进行拆分(annovar注释必须的)。
    #首先需要压缩VCF并建立索引。
    bgzip -f "$outDIR"_tmp/"$out_basename".vcf -@ 10
    tabix -p vcf "$outDIR"_tmp/"$out_basename".vcf.gz
    bcftools norm --fasta-ref "$fasta_file" --multiallelics -both --output "$outDIR"_norm/"$out_basename" --output-type z "$inputVCF"
    
    1. 根据条件进行筛选,比如:筛选出FILTER列是PASS的,DP >20 , GQ >100, QUAL >100的位点:
    bcftools filter  -i ' FILTER=="PASS" &&  DP>20 &&  GQ>100 && QUAL>100' "$outDIR"_norm/"$out_basename" --output "$outDIR"/"$out_basename" --output-type z 
    
    1. 提取 突变位点的AD和DP,顺便可以计算 VAF(习惯使用awk,所以下面的都是awk了..):
    bcftools query -f '[%AD]\n' "$outDIR"/"$out_basename" |awk 'BEGIN{FS=","}{ print $2 }'  >  > "$outDIR"_tmp/"$out_basename"_AD_tmp.txt
    bcftools query -f '[%DP]\n' "$outDIR"/"$out_basename"  > "$outDIR"_tmp/"$out_basename"_DP_tmp.txt
    # 计算VAF:
    awk 'BEGIN{OFS="\t"}{ if(NR==FNR)AD[NR]=$1; if(NR>FNR)DP[FNR]=$1; }END{ for(i=1;i<=length(AD);i++){ print AD[i],DP[i],AD[i]/DP[i] } }' "$outDIR"_tmp/"$out_basename"_AD_tmp.txt "$outDIR"_tmp/"$out_basename"_DP_tmp.txt > "$outDIR"_tmp/"$out_basename"_AD_DP_VAF_tmp.txt
    # 过滤VAF(获得VAF > 0.3的位点)
    num_anno=`zcat "$outDIR"/"$out_basename" |awk '{if($0~"^#")print 1 }' |wc -l`
    zcat "$outDIR"/"$out_basename" |awk -v num_anno="$num_anno" 'BEGIN{FS="\t"}{ if(NR==FNR && $0~"^#"){print $0}; if(NR==FNR && $0!~"^#")vcf[NR-num_anno]=$0; if(NR>FNR && $3>0.3)print vcf[FNR] }'  - "$outDIR"_tmp/"$out_basename"_AD_DP_VAF_tmp.txt > "$outDIR"_tmp/"$out_basename"_VAF_filtered.vcf
    
    1. 合并多个样本的VCF文件, 注意需要每个文件的样本名唯一,如果不唯一使用--force-samples 将自动重命名。
    # 定义用于存储待合并的vcf文件路径:
    combine_vars=""
    for((i=0;i<${#filtered_vcf[*]};i++)){
      #为每个文件建立索引,如果没压缩要先压缩
      tabix -p vcf "${filtered_vcf[$i]}"
      echo "完成了第"$i"个"
      combine_vars="${combine_vars}"" ""${filtered_vcf[$i]}"
    }
    #  --missing-to-ref表示缺失的GT表示为0/0,-merge操作多等位基因位点,这里表示不产生多等位基因位点。
    # 当然对于header使用--use-header指定,info列的合并使用--info-rules指定规则。
    bcftools merge --missing-to-ref --merge none --output "$workdir"/test/combined.vcf.gz --output-type z --threads 30  
    
    1. 上面是合并多个样本,如果是相同样本的位点合并呢,比如一个样本的SNP和INDEL进行合并,首先必须对待合并文件进行排序:
    # 排序位点:
    bcftools sort SNP_filtered.vcf -O z -o SNP_filtered_sorted.vcf.gz
    bcftools sort INDEL_filtered.vcf -O z -o INDEL_filtered_sorted.vcf.gz
    # 合并:
    bcftools concat SNP_filtered_sorted.vcf.gzINDEL_filtered_sorted.vcf.gz  -a -O z -o ALL_filtered_sorted.vcf.gz
    
    1. 提取指定染色体上的位点:
    bcftools filter -t chr1,chr10,chr11,chr12,chr13,chr14,chr15,chr16,chr17,chr18,chr19,chr2,chr20,chr21,chr22,chr3,chr4,chr5,chr6,chr7,chr8,chr9,chrM,chrX,chrY  "$workdir"/test/combined_split.vcf.gz  --output "$workdir"/test/combined_split_chr.vcf.gz --output-type z 
    
    1. 移除INFO和FORMAT中除了GT和PL的列:
    bcftools annotate -x INFO,^FORMAT/GT,FORMAT/PL file.vcf
    
    1. 使用 src.bcf来注释 dst.bcf,只注释ID,QUAL和TAG,如果TAG存在则不覆盖。
    bcftools annotate -a src.bcf -c ID,QUAL,+TAG dst.bcf
    
    1. 除了FORMAT的GT列外,注释所有的INFO和FORMAT.
    bcftools annotate -a src.bcf -c INFO,^FORMAT/GT dst.bcf
    
    1. 使用TAB分割的文件进行注释VCF(1-bae):
    # 需要 1-base的坐标系并且建立索引:
    tabix -s1 -b2 -e2 annots.tab.gz
    bcftools annotate -a annots.tab.gz -h annots.hdr -c CHROM,POS,REF,ALT,-,TAG file.vcf
    bcftools annotate -a annots.tab.gz -h annots.hdr -c CHROM,FROM,TO,TAG input.vcf
    
    1. 使用bed文件进行注释(0-base):
    bcftools annotate -a annots.bed.gz -h annots.hdr -c CHROM,FROM,TO,TAG input.vcf
    
    1. 常用查询命令:
    # 输出染色体、位置、REF、ALT:
    bcftools query -f '%CHROM  %POS  %REF  %ALT{0}\n' file.vcf.gz
    # 还是输出上面的结果,但用\t代替空格并输出样本名和基因型
    bcftools query -f '%CHROM\t%POS\t%REF\t%ALT[\t%SAMPLE=%GT]\n' file.vcf.gz
    # 输出GQ和GT:
    bcftools query -f 'GQ:[ %GQ] \t GT:[ %GT]\n' file.vcf
    # 创建bed文件: chr, pos (0-based), end pos (1-based), id
    bcftools query -f'%CHROM\t%POS0\t%END\t%ID\n' file.bcf
    # 输出样本的突变位点信息和GT:
    bcftools query -f'[%CHROM:%POS %SAMPLE %GT\n]' -i'GT="alt"' file.bcf
    

    更多原创精彩视频敬请关注生信杂谈:

    相关文章

      网友评论

        本文标题:VCF文件操作利器bcftools的常用实例

        本文链接:https://www.haomeiwen.com/subject/qryhxctx.html