AWK合并两个CSV文件:匹配记录填充日期的问题求助
解决CSV文件按主键匹配合并并填充日期/NA的问题
你的AWK脚本核心问题是仅将File2的主键存入数组,没有保存对应的日期值,导致匹配时无法输出目标日期,只能输出空逗号。以下是修正后的解决方案:
修正后的AWK脚本
awk -F "," -v OFS="," ' # 读取File2.csv,建立主键与日期的映射 ARGV[1] == FILENAME { date_map[$1] = $3 next } # 处理File1.csv,根据映射填充第四列 { print $0, ($1 in date_map ? date_map[$1] : "NA") } ' File2.csv File1.csv > Merge.csv
脚本说明
- 建立映射关系:处理第一个输入文件
File2.csv时,用主键$1作为数组date_map的键,将第三列的日期值$3存入数组,后续可通过主键直接获取对应日期。 - 处理目标文件:遍历
File1.csv的每一行,通过三元运算符判断当前行主键是否存在于映射数组中:- 存在则输出原行内容+对应日期
- 不存在则输出原行内容+
NA
- 统一分隔符:通过
-v OFS=","设置输出字段分隔符为逗号,避免手动拼接逗号可能出现的格式问题。
运行结果
执行脚本后生成的Merge.csv内容将完全符合预期:
mac-test-2,10.57.8.2,Compliant,NA mac-test-6,10.57.8.6,Compliant,NA mac-test-12,10.57.8.12,Compliant,NA mac-test-17,10.57.8.17,Noncompliant,2022-10-21
内容的提问来源于stack exchange,提问作者snigdha singh
相关产品推荐
相关产品推荐

