![使用 awk 连接多个字段](https://linux22.com/image/179673/%E4%BD%BF%E7%94%A8%20awk%20%E8%BF%9E%E6%8E%A5%E5%A4%9A%E4%B8%AA%E5%AD%97%E6%AE%B5.png)
我有 file1 如下:
2010,92614,0,1
2010,92614,4,1
和 file2 如下:
2010,0,907894
2010,1,17788
2010,2,2827
2010,3,1212
2010,4,669914
我想加入 file1 的字段 1 和 3 以及 file2 的字段 1 和 2 上的两个文件(例如,两个文件中的第一条记录为 2010 和 0),并且输出需要如下所示:
2010,92614,0,1,907894
2010,92614,4,1,669914
换句话说,我需要将 file2 的字段 3 附加到 file1 以匹配行。当我尝试以下代码时,它为我提供了 file1 中的数据,但没有提供 file2 的字段 3:
awk -F, 'NR==FNR {a[$1,$2]=$3; next} {print $0,a[$1,$2]}' OFS=, file2 file1
我错误地得到:
2010,92614,0,1,
2010,92614,4,1,
请注意末尾的逗号,但没有数据。我想这可能是因为 file1 中匹配的字段彼此不相邻。如果我按如下方式重新排序 file1 中的字段,
awk -F, '{print $1,$3,$2,$4}' OFS=, file1 > file1_mod
然后加入代码就可以工作了。我的问题是:如何在不重新排序字段的情况下加入?
请注意,本机 Bash“加入”命令可能会与一些技巧一起使用,以使其能够加入多个字段,但我对该解决方案不感兴趣。我想用awk。