我试图在文件 A 中的第 1 列和文件 B 中的第 2 列之间找到匹配的字符串,并为每个匹配打印文件 A + 文件 B 的整行。问题是文件 A 的第 1 列中有多个具有相同值的字符串,当我使用 awk 解决方案时,它只打印最后一个匹配项而不是所有匹配项。
我尝试使用之前使用过的 awk 解决方案来匹配文件 A 和文件 B 中的唯一值
awk -vOFS='\t' 'NR==FNR{a[$1]=$0;next} ($2 in a) {print a[$2],$0}' file A file B
File A
MLLT3 26.53051423 54.24992354 25.50216856
MLLT3 24.32536694 19.96855016 177.7584507
MLLT3 18.9883621 15.83462512 115.2035222
MLLT3 11.79811105 42.91062427 77.35888553
File B
ENSG00000171843 MLLT3 3.885477052 3.929504522 3.005321522
预期输出:
MLLT3 26.53051423 54.24992354 25.50216856 ENSG00000171843 MLLT3 3.885477052 3.929504522 3.005321522
MLLT3 24.32536694 19.96855016 177.7584507 ENSG00000171843 MLLT3 3.885477052 3.929504522 3.005321522
MLLT3 18.9883621 15.83462512 115.2035222 ENSG00000171843 MLLT3 3.885477052 3.929504522 3.005321522
MLLT3 11.79811105 42.91062427 77.35888553 ENSG00000171843 MLLT3 3.885477052 3.929504522 3.005321522
实际输出:
MLLT3 11.79811105 42.91062427 77.35888553 ENSG00000171843 MLLT3 3.885477052 3.929504522 3.00532152
我对任何解决方案持开放态度,我过去只是使用 awk 来解决此类问题。
由于键在 fileA 中重复,但在 fileB 中不重复,请尝试:
$ awk -vOFS='\t' 'NR==FNR{a[$2]=$0;next} ($1 in a) {print $0,a[$1]}' fileB fileA
MLLT3 26.53051423 54.24992354 25.50216856 ENSG00000171843 MLLT3 3.885477052 3.929504522 3.005321522
MLLT3 24.32536694 19.96855016 177.7584507 ENSG00000171843 MLLT3 3.885477052 3.929504522 3.005321522
MLLT3 18.9883621 15.83462512 115.2035222 ENSG00000171843 MLLT3 3.885477052 3.929504522 3.005321522
MLLT3 11.79811105 42.91062427 77.35888553 ENSG00000171843 MLLT3 3.885477052 3.929504522 3.005321522
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)