You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何逐行对比两文件,忽略文件名差异仅对比数值列并输出差异行?

解决方案:用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

命令解释

  1. BEGIN{FS="|"}:设置字段分隔符为竖线|,这样每行的文件名和数值会被自动分成两个独立字段。
  2. NR==FNR代码块:专门处理第一个输入文件(count.txt):
    • gsub(/_/, "", $1):移除第一列里的所有下划线
    • tolower(...):把处理后的第一列转成小写,彻底消除大小写差异
    • 将标准化后的名称作为数组键,对应的数值存入count数组备用
  3. 处理ctrl.txt的代码块:
    • 对ctrl.txt的第一列做完全相同的标准化处理
    • 如果count数组里存在这个标准化名称,且对应的数值和当前行的数值不相等,就输出ctrl.txt的当前行

测试你的示例输入

假设你的文件内容是:

ctrl.txt:

Thunderbird|1000
Mustang|2000
Hurricane|3000

count.txt:

Thunder_bird|1000
MUSTANG|2000
Hurricane|3001

运行命令后,会输出:

Hurricane|3000

完全符合你要的结果!

内容的提问来源于stack exchange,提问作者cheapcoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:48:41