【问题标题】:Automated awk command to remove duplicated fields in a VCF's INFO column keeping the first occurrence自动 awk 命令删除 VCF INFO 列中的重复字段,保持第一次出现
【发布时间】:2019-07-11 13:49:40
【问题描述】:

我的 VCF 文件中存在重复字段会导致其他程序出现问题。 VCF 文件是制表符分隔的文件。下面给出了 INFO 列的一个单元格。细胞的结构是:

info1=x;info2=y;.....;info1=.;info2=.;.....

我需要一个脚本来删除第一次出现后重复的重复字段并将单元格替换为:

info1=x;info2=y;.....

实际的单元格...

.;ANNOVAR_DATE=2017-07-17;Func.refGene=exonic;Gene.refGene=GRIK3;GeneDetail.refGene=.;ExonicFunc.refGene=nonsynonymous_SNV;AAChange.refGene=GRIK3:NM_000831:exon10:c.C1348T:p.R450W;avsnp150=.;cosmic70=ID\x3dCOSM186835\x3bOCCURENCE\x3d2(large_intestine),1(lung),1(haematopoietic_and_lymphoid_tissue);ExAC_ALL=.;ExAC_AFR=.;ExAC_AMR=.;ExAC_EAS=.;ExAC_FIN=.;ExAC_NFE=.;ExAC_OTH=.;ExAC_SAS=.;SIFT_score=0.001;SIFT_pred=D;Polyphen2_HDIV_score=1.0;Polyphen2_HDIV_pred=D;Polyphen2_HVAR_score=0.916;Polyphen2_HVAR_pred=D;LRT_score=0.000;LRT_pred=D;MutationTaster_score=0.983;MutationTaster_pred=D;MutationAssessor_score=2.485;MutationAssessor_pred=M;FATHMM_score=2.73;FATHMM_pred=T;PROVEAN_score=-4.81;PROVEAN_pred=D;VEST3_score=0.558;CADD_raw=6.549;CADD_phred=31;DANN_score=0.999;fathmm-MKL_coding_score=0.906;fathmm-MKL_coding_pred=D;MetaSVM_score=-0.981;MetaSVM_pred=T;MetaLR_score=0.095;MetaLR_pred=T;integrated_fitCons_score=0.653;integrated_confidence_value=0;GERP++_RS=4.03;phyloP7way_vertebrate=0.917;phyloP20way_mammalian=0.953;phastCons7way_vertebrate=0.997;phastCons20way_mammalian=0.991;SiPhy_29way_logOdds=12.627;ALLELE_END;ANNOVAR_DATE=2017-07-17;Func.refGene=exonic;Gene.refGene=GRIK3;GeneDetail.refGene=.;ExonicFunc.refGene=.;AAChange.refGene=.;avsnp150=.;cosmic70=.;ExAC_ALL=.;ExAC_AFR=.;ExAC_AMR=.;ExAC_EAS=.;ExAC_FIN=.;ExAC_NFE=.;ExAC_OTH=.;ExAC_SAS=.;SIFT_score=.;SIFT_pred=.;Polyphen2_HDIV_score=.;Polyphen2_HDIV_pred=.;Polyphen2_HVAR_score=.;Polyphen2_HVAR_pred=.;LRT_score=.;LRT_pred=.;MutationTaster_score=.;MutationTaster_pred=.;MutationAssessor_score=.;MutationAssessor_pred=.;FATHMM_score=.;FATHMM_pred=.;PROVEAN_score=.;PROVEAN_pred=.;VEST3_score=.;CADD_raw=.;CADD_phred=.;DANN_score=.;fathmm-MKL_coding_score=.;fathmm-MKL_coding_pred=.;MetaSVM_score=.;MetaSVM_pred=.;MetaLR_score=.;MetaLR_pred=.;integrated_fitCons_score=.;integrated_confidence_value=.;GERP++_RS=.;phyloP7way_vertebrate=.;phyloP20way_mammalian=.;phastCons7way_vertebrate=.;phastCons20way_mammalian=.;SiPhy_29way_logOdds=.;ALLELE_END

【问题讨论】:

  • 你已经尝试过做什么?有自己的贡献吗?
  • @SlawomirDziuba 我不熟悉 awk 或 sed 但确实需要一种解决方法,因为以后使用的工具不需要冗余。

标签: bash awk vcf-variant-call-format


【解决方案1】:

例如数据:

info1=x;info2=y;xyz=abc;info1=othervalue;info2=.

假设您要保留名称的第一个实例!

echo "info1=x;info2=y;xyz=abc;info1=othervalue;info2=." |sed -e 's/;/\n/g' |awk -F= '{ if ($1 in words == 0) words[$1]=$2} END { for (w in words) printf"%s=%s;", w, words[w]}'

结果:

info1=x;info2=y;xyz=abc;

与您一起适应您的数据。
我用的是 gawk v 4.0.2

说明:
1。 sed 在分号出现的地方将字符串分成几行,
2。 -e 选项表示可以使用转义字符
3。 -F = 指示 AWK 在 = 处将行分成单词
4。 {if ($ 1 in words == 0) words [$ 1] = $ 2} 对于每一行,检查单词 1 是否在单词数组中,如果没有,则将单词数组的元素与单词 word1 的值相加第 2 字
5。 END {...} 在最后完成,读取数组 words 的所有元素,然后 printf 以预期的格式打印键和值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-19
    • 2016-09-10
    • 2015-06-04
    • 1970-01-01
    • 2014-12-14
    • 2022-11-22
    • 1970-01-01
    相关资源
    最近更新 更多