【发布时间】:2020-12-08 01:09:19
【问题描述】:
我是一名编程初学者,我接到了一项任务,其中应使用 awk 提取文本文件中“INFO”列中的某些字符串。代码如下:
awk -F '\t' '/^[^#]/ {n=split($8,a,/[;]/); for(i=1;i<=n;i++) {if(a[i] ~ /^CLNDN=/) printf("%s\t",a[i]); else if(a[i] ~ /^CLNREVSTAT=/) printf("%s\t",a[i]); else if(a[i] ~ /^CLNSIG=/) printf("%s\t",a[i]);else if(a[i] ~ /^CLNSIGCONF=/) printf("%s\t",a[i]); else if(a[i] ~ /^ORIGIN=/) printf("%s\t",a[i]); } printf("\n");}' test.vcf > trial.vcf
这里的输入文件:
1 879375 950448 C T . . ALLELEID=929884;CLNDISDB=MedGen:CN517202;CLNDN=not_provided;CLNHGVS=NC_000001.10:g.879375C>T;CLNREVSTAT=criteria_provided,_single_submitter;CLNSIG=Pathogenic;CLNVC=single_nucleotide_variant;CLNVCSO=SO:0001483;GENEINFO=SAMD11:148398;MC=SO:0001587|nonsense;ORIGIN=1
1 955619 210112 G C . . AF_EXAC=0.03475;AF_TGP=0.00879;ALLELEID=206690;CLNDISDB=MONDO:MONDO:0014052,MedGen:C3808739,OMIM:615120|MedGen:CN169374|MedGen:CN517202;CLNDN=Myasthenic_syndrome,_congenital,_8|not_specified|not_provided;CLNHGVS=NC_000001.10:g.955619G>C;CLNREVSTAT=criteria_provided,_conflicting_interpretations;CLNSIG=Conflicting_interpretations_of_pathogenicity;CLNSIGCONF=Benign(1),Likely_benign(2),Uncertain_significance(1);CLNVC=single_nucleotide_variant;CLNVCSO=SO:0001483;GENEINFO=AGRN:375790;MC=SO:0001583|missense_variant;ORIGIN=1;RS=201073369
下面,你可以看到我想要得到的示例输出。
CLNDN=not_provided CLNREVSTAT=criteria_provided,_single_submitter CLNSIG=Pathogenic ORIGIN=1
CLNDN=Myasthenic_syndrome,_congenital,_8|not_specified|not_provided CLNREVSTAT=criteria_provided,_conflicting_interpretations CLNSIG=Conflicting_interpretations_of_pathogenicity CLNSIGCONF=Benign(1),Likely_benign(2),Uncertain_significance(1) ORIGIN=1
第一行的 CLNSIG 和 ORIGIN 之间有一个间隙,因为该行不包含 CLNSIGCONF= 信息。 这里,我想提取以CLDN=、CLNREVSTAT=、CLNSIG=、CLNSIGCONF=和ORIGIN=开头的字符串,分别打印到输出文件的1-5列。 该代码能够提取兴趣,但我坚持将它们打印到指定的列中。
如果您能帮助我,我将不胜感激(并且非常愿意接受任何建议)。
非常感谢您。
【问题讨论】:
-
很高兴你在你的问题中表现出了你的努力。您能否发布您的 Input_file 示例以便更好地理解问题。
-
请求您更新您的问题,以便更好地理解 CODE TAGS 中的示例。
-
我更新了帖子。
-
不会是像
CLNDN,CLNREVSTAT,etc.这样的字段名称作为标题行然后只是它们下面的值比包含字段名称和它的值的每一行更好的输出格式吗?
标签: awk