如何使用awk合并两个文件生成指定格式的第三个文件
问题排查与修复方案
现有脚本的错误点
- 字段分割规则错误:直接设置
FS="|"会导致分割后的字段前后携带多余空格,两个文件的同名字段因为空格差异无法匹配,是输出空字段、重复行的核心原因 - 关联键逻辑错误:仅用单列作为匹配键无法保证唯一性,应该用「日期+时间」的组合键关联两个文件的行
- 字段存储逻辑缺失:没有存储文件1中最后两列
DDDD、11的内容,无法输出符合预期的结果 - 输出字段拼接规则错误:和预期的输出结构不匹配,缺少部分字段的输出逻辑
修复后的脚本
#!/bin/bash set -e # FS用正则匹配 | 前后的任意空格,自动清理字段前后多余空格 # 用日期+时间的组合作为唯一匹配键,存储文件1需要补充的字段 awk ' NR==FNR{ key = $1 SUBSEP $2 col3[key] = $3 col6[key] = $6 col7[key] = $7 next } { key = $1 SUBSEP $2 # 按预期结构拼接输出 print $1, $2, col3[key], $4, $5, $6, col6[key], col7[key] }' FS=" *\| *" OFS=" | " "$1" "$2" > "$3" echo "done"
调用说明
运行时按顺序传入文件1、文件2、输出文件路径即可,示例:
bash your_script.sh file1.txt file2.txt file3.txt
执行后生成的file3内容和预期完全一致。
内容的提问来源于stack exchange,提问作者arm11
相关产品推荐
相关产品推荐

