使用Awk比对两个大型CSV文件并关联提取字段问题求助
Awk 匹配实现方案
核心逻辑是先加载File1的姓名与城市的映射关系到内存,再遍历File2逐行匹配输出,针对5000行级别的文件没有性能压力。
可用命令
awk -F ';' 'BEGIN{OFS=FS} NR==FNR {city[$1]=$2; next} $3 in city {print $0, city[$3]}' File1 File2
命令参数说明
-F ';':指定输入文件的字段分隔符为分号,适配两个CSV的格式BEGIN{OFS=FS}:设置输出字段分隔符和输入保持一致,均为分号,保证输出格式统一NR==FNR {city[$1]=$2; next}:处理第一个输入文件(File1)时,将第一列姓名作为键、第二列城市作为值存入city数组,执行next跳过后续逻辑,避免第一个文件进入匹配输出环节$3 in city {print $0, city[$3]}:处理第二个输入文件(File2)时,判断第三列的姓名是否存在于city数组中,存在则打印当前行完整内容,末尾追加对应城市信息
执行上述命令即可直接得到你给出的预期输出结果。
内容的提问来源于stack exchange,提问作者Nildran
相关产品推荐
相关产品推荐

