使用 join 和 awk 连接两个文件

问题描述 投票:0回答:1

我有以下文件,名为 file1:

j_1,2019-04-01,20.00,,,,22
j_1,2019-04-01,100.00,,,,33
j_2,2019-04-01,100.00,,,,11
j_3,2019-04-01,-264.56,,,,33
j_4,2019-04-04,130.00,,,,22
j_5,2019-04-04,130.00,,,,44
j_6,2019-04-04,-12.90,,,,55
j_7,2019-04-05,-9.78,,,,11
j_8,2019-04-05,-250.00,,,,22
j_9,2019-04-08,100.00,,,,66

和文件2

11,Accounting,VE
22,Paint,VE
33,Legal,VE
44,Office,VE
55,Maintenance,VE
66,IT,VE

我想加入 file1(第 7 列)和 file2(第 1 列)来创建 file3。

j_2,2019-04-01,100.00,,,,Accounting,VE
j_7,2019-04-05,-9.78,,,,Accounting,VE
j_1,2019-04-01,20.00,,,,Paint,VE
j_4,2019-04-04,130.00,,,,Paint,VE
j_8,2019-04-05,-250.00,,,,Paint,VE
j_1,2019-04-01,100.00,,,,Legal,VE
j_3,2019-04-01,-264.56,,,,Legal,VE
j_5,2019-04-04,130.00,,,,Office,VE
j_6,2019-04-04,-12.90,,,,Maintenance,VE
j_9,2019-04-08,100.00,,,,IT,VE

我已经尝试过了

join -t ',' -1 7 -2 1 file1 file2 | head -n 2

导致

11,j_2,2019-04-01,100.00,,,,Accounting,VE
11,j_7,2019-04-05,-9.78,,,,Accounting,VE

为什么前面会出现一个 11, 以及如何运行 join 命令才能得到所需的结果。 此外,我还希望能够在 awk 中做到这一点。我在互联网上寻找解决方案并发现了这一点,但没有完全理解它以将其应用到我的上下文中。另外,我是否能够将 file2 和 file1 作为变量传递,因为我真的想将其用作 bash 脚本的一部分。

awk 'BEGIN {FS=OFS=","} NR==FNR {h[$1] = $2; next} {print $0,h[$1]}' file2 file1

非常感谢您的帮助!

bash join awk
1个回答
0
投票

我们开始了(可移植到任何

awk
版本),非常接近您的代码:

awk '
    BEGIN{FS=OFS=","}
    NR==FNR{cp=$7;$7="";a[cp]=$0;next}
    {print a[$1], $2, $3}
' file1 file2

j_7,2019-04-05,-9.78,,,,,Accounting,VE
j_8,2019-04-05,-250.00,,,,,Paint,VE
j_3,2019-04-01,-264.56,,,,,Legal,VE
j_5,2019-04-04,130.00,,,,,Office,VE
j_6,2019-04-04,-12.90,,,,,Maintenance,VE
j_9,2019-04-08,100.00,,,,,IT,V
© www.soinside.com 2019 - 2024. All rights reserved.