让我们坐一下我的 file1 是:
A S
B Q
文件2是:
B 2
我想将 file2 中的 $1 与 $1 file1 匹配并打印 file1 $2 && file2 $2,输出如下:
Q 2
我的awk
解决方案是:
awk 'NR==FNR {a[$1]=$1$2;next} $1 in a {print $2, a[$2]}' file2 file1
它只给我Q
- 它不打印数组的第二个元素。
如何打印数组的元素?
编辑
我更新了我的问题,因为适用于虚拟示例的答案不适用于我的实际数据。
f1
chr2 47558199 ENSG00000236824.1
chr2 47558199 ENSG00000236824.1
chr2 47558199 ENSG00000236824.1
f2
ENSG00000236824.1 AAAAAAA
我想匹配f2 $1
并f1 $3
打印f1 $0
加号f2 $2
我尝试了这个答案awk 'NR==FNR {a[$1]=$2;next} $3 in a {print $0, a[$1]}' f2 f1
,
但仍然没有得到我想要的输出。
awk
上面的代码只让我得到这个:
chr2 47558199 ENSG00000236824.1
chr2 47558199 ENSG00000236824.1
chr2 47558199 ENSG00000236824.1
答案1
你就快到了。只需将数组索引更改为 $1 – 这是两个文件的公共元素:
awk 'NR==FNR {a[$1]=$2;next} $1 in a {print $2, a[$1]}' file2 file1
不知道为什么你把 $1$2 放入数组中,因为你似乎只需要 $2 。
更新根据问题编辑。
您明确地放置了“匹配f2 $1
” f1 $3
(我希望每个问题都如此清晰),因此只需将其相应地写入代码中即可:
f2 $1 f1 $3
| |
awk 'NR==FNR {a[$1]=$2;next} $3 in a {print $0, a[$3]}' f2 f1