【发布时间】:2019-08-18 04:14:23
【问题描述】:
我正在尝试使用awk 来匹配两个文件(file1 和 file2)。对于 file2 中与 file1 匹配的列的每一行,我希望命令打印出 file1 中的第二列。
我查看了这里的几个解决方案,并找到了一些可行的方法(部分),但我不明白它是如何工作的。
awk 'NR==FNR {a[$1]=$2; next} $1 in a{print a[$1]}' file1 file2 >> output
这是一个输入示例:
#File1
0_1 apple
0_2 mango
0_3 banana
...
3_1 durian
3_4 dragonfruit
3_20 pear
#File2
0_1 3_1
0_1 3_1
0_2 3_4
0_3 3_20
当我将 File2 的第一列与 File1 匹配时,上面的 awk 命令返回我想要的结果。
#Output
apple
apple
mango
banana
所以我很自然地稍微调整了这一行,以便对 File2 中的第二列做同样的事情。
awk 'NR==FNR {a[$1]=$2; next} $2 in a{print a[$1]}' file1 file2 >> output
但我收到了与上述完全相同的结果,而我期望的是:
#Expected output
durian
durian
dragonfruit
pear
更糟糕的是,当我这样做时,我得到了想要的输出:
awk 'NR==FNR {a[$1]=$2; next} $1 in a{print a[$2]}' file1 file2 >> output
有人可以向我解释这背后的逻辑(为数组赋值)还是其他地方出了什么问题?
【问题讨论】:
标签: awk text-processing