awk,基于列值合并两个数据集

时间:2018-08-17 09:28:31

标签: awk

我需要合并存储在变量中的两个数据集。此合并需要基于"$x"第一列和"$y"

第三列的条件
 -->echo "$x"
12 hey
23 hello
34 hi


 -->echo "$y"
aa bb 12
bb cc 55
ff gg 34
ss ww 23

通过以下命令,我设法将$x的第一列的值存储在a[]中,并检查了$y的第三列,但没有得到我的期望,有人可以吗在这里帮助。

awk 'NR==FNR{a[$1]=$1;next} $3 in a{print $0,a[$1]}' <(echo "$x") <(echo "$y")
aa bb 12
ff gg 34
ss ww 23

预期结果:

aa bb 12 hey
ff gg 34 hi
ss ww 23 hello

2 个答案:

答案 0 :(得分:2)

您的答案几乎是正确的:

awk 'NR==FNR{a[$1]=$2;next} ($3 in a){print $0,a[$3]}' <(echo "$x") <(echo "$y")

请注意a[$1]=$2print $0,a[$3]

答案 1 :(得分:-1)

join -1 1 -2 3 <(sort -k 1b,1 a.txt) <(sort -k 3b,3 b.txt) |awk '{print $3, $4, $1, $2 }'

可能是使用两个数字列上的join在两个文本文件a.txt和b.txt中输入的一种解决方案。

虽然它不保留顺序。如果很重要,您可能必须再次排序。