AIX 6.x平台使用AWK实现多文件字段比对条件匹配的方法咨询
AIX 6.x awk多条件匹配实现方案
完全可以实现,AIX 6.x 自带的awk原生支持多条件匹配、数组键值存储的标准语法,不需要额外安装第三方工具。
修改思路
你原来的脚本只在数组中存储了Car.txt的匹配字段作为索引,要新增过滤条件需要调整两处:
- 读取Car.txt时,除了存储匹配字段作为索引,还要将对应车辆的可用性(最后1列)存在数组值中,方便后续判断
- 匹配Employee.txt时,同时校验三个规则:
- 员工ID存在于Car.txt的匹配索引中
- 员工状态(Employee最后1列)不等于
X - 该员工对应车辆的可用性为
Y
注意事项
根据你提供的文件样例,Car.txt中与Employee员工ID关联的字段是第4列(如100|football|red|1|Y中的1为员工ID),如果你的原脚本确实是用Car.txt第3列(颜色字段)做匹配,可将下方代码中的$4改回$3即可。
最终可运行脚本
awk -F"|" ' # 处理第一个输入文件Car.txt,存储员工ID对应的车辆可用性 NR == FNR { emp_car_avail[$4] = $5 next } # 处理第二个输入文件Employee.txt { if ($1 in emp_car_avail && $6 != "X" && emp_car_avail[$1] == "Y") { print > "match.txt" } else { print > "no_match.txt" } }' Car.txt Employee.txt
如果在AIX 6.x上执行默认awk报错,可以直接替换为nawk(AIX系统默认预装的标准兼容版本awk)运行即可。
样例数据运行验证
用你提供的测试数据运行后,match.txt为空,所有记录都会进入no_match.txt,符合规则预期:
- 员工1:匹配到车辆,但状态为X,不符合
- 员工2:匹配到车辆,但车辆可用性为N,不符合
- 员工3-5:无匹配车辆记录,不符合
- 员工6:匹配到车辆,但车辆可用性为N,不符合
内容的提问来源于stack exchange,提问作者George Jackson
相关产品推荐
相关产品推荐

