如何用awk将file1指定列更新到file2并保留file1独有的记录
awk实现CSV文件字段更新并追加独有记录解决方案
你需要补充读取完file2后的遍历逻辑,输出file1中未匹配到的记录,修改后的脚本如下:
awk 'BEGIN{OFS=","; FPAT = "([^,]*)|(\"[^\"]+\")"} NR==FNR { a3[$1] = $3 a4[$1] = $4 row[$1] = $0 next } { if ($1 in a3) { $3 = a3[$1] $4 = a4[$1] } print seen[$1] = 1 } END { for (g in row) { if (g != "guid" && !(g in seen)) { print row[g] } } }' file1.csv file2.csv
核心修改点
- 读取file1时新增
row[$1]数组存储每行完整内容,用于后续输出独有记录 - 处理file2时新增
seen[$1]数组标记已输出的guid,避免重复 - 新增END块遍历file1的所有guid,跳过表头和已输出的记录,打印file1独有的行
如果你的需求需要过滤部分file1的独有记录(比如示例期望输出中省略了后两条),可以在END块的判断条件中添加自定义过滤规则即可。
内容的提问来源于stack exchange,提问作者Boyd
相关产品推荐
相关产品推荐

