AIX 6.x下使用AWK对比文件输出Employee.txt无匹配员工记录问题
问题根因
- 现有脚本的文件读取顺序和关联键设置完全反向:你当前是先读取Employee.txt存员工号,再遍历Car.txt判断匹配,输出的不匹配项自然是Car.txt的记录,和你要提取Employee中无匹配记录的需求相反。
- match.txt重复是因为同一个员工在Car.txt中存在多条车辆记录时,每次匹配都会打印一次对应Employee的记录,导致重复输出。
解决命令
基础版(仅区分Employee是否有匹配,无重复)
直接输出有车/无车的Employee记录,无重复内容:
awk -F"|" 'NR==FNR { car_emp[$3] = 1; next } { if ($1 in car_emp) { print $0 > "match_employee.txt" } else { print $0 > "no_match_employee.txt" } }' Car.txt Employee.txt
执行后no_match_employee.txt就是你需要的3条无匹配员工记录。
关联车辆信息版(保留原match格式+去重)
如果需要保留原需求中match.txt的员工记录|车辆ID|车辆颜色格式,同时避免同一员工多条车辆记录导致的重复,可使用以下命令:
awk -F"|" 'NR==FNR { # 只保留每个员工的第一条车辆信息,避免重复 if (!($3 in car_map)) { car_map[$3] = $1"|"$2 } next } { if ($1 in car_map) { print $0"|"car_map[$1] > "match.txt" } else { print $0 > "no_match.txt" } }' Car.txt Employee.txt
兼容说明
以上命令语法完全兼容AIX 6.x自带的原生awk,无需额外安装其他工具。
内容的提问来源于stack exchange,提问作者George Jackson
相关产品推荐
相关产品推荐

