我有两个文件fileA
和fileB
,如下所示:
fileA
:
chrM 150 . T C 7807.77 PASS AC=2;AF=1.00;AN=2;DP=247;Dels=0.00;FS=0.000;HaplotypeScore=4.7038;MLEAC=2;MLEAF=1.00;MQ=51.13;MQ0=0;QD=31.61;VQSLOD=3.92;culprit=MQ;EFF=intergenic_region(MODIFIER||||||||) GT:AD:DP:GQ:PL 1/1:0,247:247:99:7836,727,0
chrM 195 . C T 5638.77 PASS AC=2;AF=1.00;AN=2;DP=176;Dels=0.00;FS=0.000;HaplotypeScore=2.5193;MLEAC=2;MLEAF=1.00;MQ=42.23;MQ0=0;QD=32.04;VQSLOD=3.62;culprit=MQ;EFF=intergenic_region(MODIFIER||||||||) GT:AD:DP:GQ:PL 1/1:0,176:176:99:5667,517,0
chrM 199 rs72619362 T C 5058.77 PASS AC=2;AF=1.00;AN=2;DB;DP=169;Dels=0.00;FS=0.000;HaplotypeScore=0.7887;MLEAC=2;MLEAF=1.00;MQ=39.55;MQ0=0;QD=29.93;VQSLOD=4.68;culprit=MQ;EFF=intergenic_region(MODIFIER||||||||) GT:AD:DP:GQ:PL 1/1:0,169:169:99:5087,472,0
chrM 204 rs3135032 T C 4110.77 PASS AC=2;AF=1.00;AN=2;DB;DP=168;Dels=0.00;FS=0.000;HaplotypeScore=0.0000;MLEAC=2;MLEAF=1.00;MQ=39.77;MQ0=0;QD=24.47;VQSLOD=2.90;culprit=MQ;EFF=intergenic_region(MODIFIER||||||||) GT:AD:DP:GQ:PL 1/1:0,168:168:99:4139,435,0
fileB
:
chrM 150 . T C 15 sfail 3 GT:DP:FT:GQ:GL 1/0:4:PASS:30:-3.27436,-0.000346498,-12.6286
chr1 10025 . T C 15 sfail 3 GT:DP:FT:GQ:GL 1/0:4:PASS:30:-3.27436,-0.000346498,-12.6286
如果两个文件的前两列匹配,则输出应为fileA
的所有列和fileB
的10列。
如果我必须只匹配列,我可以这样做:
awk 'FNR==NR {a[$0]; next} $0 in a' fileA fileB
但从fileB
获取第10列有点棘手。我怎样才能做到这一点?
答案 0 :(得分:1)
这听起来像你想要的只是
awk 'FNR==NR {a[$1,$2]=$0; next} ($1,$2) in a {print a[$1,$2], $10}' fileA fileB
按字段fileA
和$1
存储来自$2
的行。
对于fileB
中与存储字段匹配的每一行,打印出存储的行和当前行的第十个字段。