使用 awk 连接多个字段

使用 awk 连接多个字段

我有 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。

相关内容