awk 无法打印数组元素

awk 无法打印数组元素

让我们坐一下我的 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 $1f1 $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 $1f1 $3(我希望每个问题都如此清晰),因此只需将其相应地写入代码中即可:

              f2 $1                             f1 $3
                |                                 |
awk 'NR==FNR {a[$1]=$2;next} $3 in a {print $0, a[$3]}' f2 f1

相关内容