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

使用AWK对比两组数字(随机/规则生成)的技术需求问询

使用AWK验证两组数字的对应关系

针对你描述的文件处理需求——提取7位数字的最后4位,对比其去除前导零后的结果与文件中第二组数字是否一致,我整理了一个实用的AWK解决方案,结合示例帮你快速上手:

核心AWK脚本(默认空格分隔字段)

假设你的文件中,第一组7位数字和第二组数字是用空格分隔的,直接用下面的命令即可:

awk '{
    # 提取第一组7位数字的最后4位
    last4 = substr($1, 4, 4)
    # 将最后4位转为数值(自动去除前导零,得到预期的第二组值)
    expected = last4 + 0
    # 读取文件中的第二组数字并转为数值(确保类型统一)
    actual = $2 + 0

    # 对比输出结果
    if (expected == actual) {
        printf "✅ 匹配:第一组最后4位[%s] → 第二组[%d]\n", last4, actual
    } else {
        printf "❌ 不匹配:第一组最后4位[%s] 预期[%d],实际[%d]\n", last4, expected, actual
    }
}' your_input_files*.txt

关键逻辑解释

  • substr($1, 4, 4):从第一列(第一组数字)的第4个字符开始截取4位,完美提取7位数字的最后4位(比如2000066会得到0066)。
  • last4 + 0:利用AWK的自动类型转换,把字符串形式的最后4位转为数值,自动去掉前导零(0066→66,0000→0),这就是我们预期的第二组数字。
  • $2 + 0:把文件中的第二组数字也转为数值,避免字符串对比的潜在问题(即使第二组没有前导零,转数值也能确保对比的准确性)。

示例演示

输入文件内容(example.txt)

1007777 7777
2000066 66
3001234 1234
4560000 0
7890010 10
1234567 4568

执行命令后的输出

✅ 匹配:第一组最后4位[7777] → 第二组[7777]
✅ 匹配:第一组最后4位[0066] → 第二组[66]
✅ 匹配:第一组最后4位[1234] → 第二组[1234]
✅ 匹配:第一组最后4位[0000] → 第二组[0]
✅ 匹配:第一组最后4位[0010] → 第二组[10]
❌ 不匹配:第一组最后4位[4567] 预期[4567],实际[4568]

适配不同分隔符

如果你的文件用逗号、冒号等其他分隔符,只需调整字段分隔符即可。比如用逗号分隔的情况:

awk -F',' '{
    last4 = substr($1, 4, 4)
    expected = last4 + 0
    actual = $2 + 0
    if (expected == actual) {
        printf "✅ 行%d 匹配:%s → %s\n", NR, $1, $2
    } else {
        printf "❌ 行%d 不匹配:%s 预期[%d],实际[%s]\n", NR, $1, expected, $2
    }
}' your_comma_separated_files*.txt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:31:20