我有以下 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 一起打印。