如何逐行对比两文件,忽略文件名差异仅对比数值列并输出差异行?
解决方案:用AWK实现忽略文件名格式差异的数值对比
没问题,我帮你设计一个精准的awk方案,完全符合你的需求!核心思路是先对两个文件的第一列做标准化处理(移除下划线、统一转小写),再匹配相同名称的行并对比数值列,最后输出ctrl.txt中数值不匹配的原行。
具体AWK命令
你可以直接运行这条单行命令:
awk 'BEGIN{FS="|"} NR==FNR{ # 处理count.txt:标准化第一列,存储数值到数组 key = tolower(gsub(/_/, "", $1) ? $1 : $1) count[key] = $2 next } { # 处理ctrl.txt:标准化第一列,对比数值 key = tolower(gsub(/_/, "", $1) ? $1 : $1) if (count[key] != "" && count[key] != $2) { print $0 } }' count.txt ctrl.txt
命令解释
BEGIN{FS="|"}:设置字段分隔符为竖线|,这样每行的文件名和数值会被自动分成两个独立字段。NR==FNR代码块:专门处理第一个输入文件(count.txt):gsub(/_/, "", $1):移除第一列里的所有下划线tolower(...):把处理后的第一列转成小写,彻底消除大小写差异- 将标准化后的名称作为数组键,对应的数值存入
count数组备用
- 处理ctrl.txt的代码块:
- 对ctrl.txt的第一列做完全相同的标准化处理
- 如果
count数组里存在这个标准化名称,且对应的数值和当前行的数值不相等,就输出ctrl.txt的当前行
测试你的示例输入
假设你的文件内容是:
ctrl.txt:
Thunderbird|1000 Mustang|2000 Hurricane|3000count.txt:
Thunder_bird|1000 MUSTANG|2000 Hurricane|3001
运行命令后,会输出:
Hurricane|3000
完全符合你要的结果!
内容的提问来源于stack exchange,提问作者cheapcoder
相关产品推荐
相关产品推荐

