我有一个包含数千行的每日 csv 文件。
我被要求连接两列,然后当给定列中的值与另一个文件中的表匹配时插入新列。预计会出现空值。
简化数据(第 3 列已连接):
每日.csv
HVDS,1810,HVDS_1810,"match value",xxxxx
HVRS,5230,HVRS_5230,"match value",xxxxx
WPHV,0,WPHV_0000,"no match",xxxxx
参考文件有两列,搜索$1并在上面插入$2
参考.csv
HVDS_1810,dfTVfsd
HVRS_5230,UtsfeOO
WPHV_4242,BBnnstd
只需要一些关于从哪里开始的想法。
答案1
如果我理解正确,您的问题“不匹配”应替换为 中的值ref.csv
。一个可能的解决方案是awk
:
awk -F',' 'BEGIN { OFS = "," } FNR==NR { m[$1] = $2; next; } { if ($3 in m) { $4 = "\"" m[$3] "\""; } else { $4 = "\"" "\""; } print; }' ref.csv daily.csv
说明:
FNR==NR
读取第一个文件时为 true。
我们创建m
具有索引第一列和值第三列的数组。
然后在第二个块中,我们读取第二个文件(因为next
第一个块中的指令),检查第 3 列是否是数组的索引m
,如果是,则设置新的列值。如果不是,我们设置空值。