-2

我的 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
4

1 回答 1

0

例如数据:

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 中,其值为word 2
5. END {...} 在最后完成,读取数组 words 的所有元素,然后 printf 以预期格式打印键和值

于 2019-07-11T14:48:13.877 回答