基于 awk 中的重复性匹配值并打印总和

基于 awk 中的重复性匹配值并打印总和

我有以下 CSV 文件:

文件1

19997,20161108,FSM,EXCHANGE_2,GLOBE,0  
17541,20161108,TATA_MOBILE,WORLD,TELECOM,1  
34556,20161108,europe,state,0  

文件2

EXCHANGE_2,CANADA,30298  
WORLD,INDIA,1123  
state,canada,2241  

如何通过将文件 1 的第 4 列与文件 2 的第 1 列匹配来创建将这两个文件组合在一起的新文件?结果应该是:

19997,20161108,FSM,EXCHANGE_2,GLOBE,0,CANADA,30298
17541,20161108,TATA_MOBILE,WORLD,TELECOM,1,INDIA,1123
34556,20161108,europe,state,0,canada,2241

答案1

通过公共字段连接两个文件是该join命令的典型任务,请允许我用 awk 之外的其他内容来回答。这是bash代码:

join -t, -1 4 -2 1 -o 1.1,1.2,1.3,1.4,1.5,1.6,2.2,2.3 <(sort -t, -k4 file1.csv) <(sort -t, -k1 file2.csv)

答案2

怎么样

awk -F, 'NR==FNR {l[$4]=$0 ; next} {print l[$1]","$2","$3}' file1 file2

NR==FNR {l[$4]=$0 ; next}读取第一个文件时,第一个块处于活动状态,并将整行放入名为 的关联数组中l,使用第四个字段作为键。next导致跳过该行的以下说明。

仅当读取第二个文件时,第二块{print l[$1]","$2","$3}才处于活动状态,并使用 file2 第一列中给出的键从 file1 中查找整个存储行。然后,与 2 个逗号以及文件 2 中的字段 $2 和 $3 一起打印。

相关内容