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

使用awk实现两文件匹配列的BudgetSpent差值计算并生成结果文件

使用awk实现两文件匹配列的BudgetSpent差值计算并生成结果文件

别慌!刚接触awk确实容易懵,我来一步步教你怎么实现这个需求~

核心思路

我们需要先把第二个文件(file2.txt)里的记录用「FirstName+LastName」作为唯一标识存起来,然后遍历第一个文件(file1.txt),找到匹配的记录后计算BudgetSpent的差值(file1的数值减去file2的),最后输出指定列。

具体实现代码

你可以把下面的代码保存成一个脚本文件(比如calculate_diff.awk):

# 处理第一个输入文件(file2.txt),存储数据
NR == FNR {
    # 用FirstName和LastName拼接成唯一键
    key = $1 " " $2
    # 存储对应的Age和BudgetSpent
    age_map[key] = $3
    budget_map[key] = $4
    # 跳过后续代码,处理下一行
    next
}

# 处理第二个输入文件(file1.txt)
{
    key = $1 " " $2
    # 检查当前记录在file2中是否存在匹配项
    if (key in budget_map) {
        # 计算差值:file1的BudgetSpent - file2的BudgetSpent
        diff = $4 - budget_map[key]
        # 输出结果列:FirstName、LastName、Age、差值
        print $1, $2, age_map[key], diff
    }
}

执行命令

在终端里运行以下命令,就能生成你要的file3.txt:

awk -f calculate_diff.awk file2.txt file1.txt > file3.txt

或者你也可以直接用一行命令完成,不需要单独存脚本:

awk 'NR==FNR{key=$1" "$2;age_map[key]=$3;budget_map[key]=$4;next}{key=$1" "$2;if(key in budget_map){diff=$4-budget_map[key];print $1,$2,age_map[key],diff}}' file2.txt file1.txt > file3.txt

验证结果

运行后生成的file3.txt内容会和你预期的完全一致:

FirstName LastName Age BudgetSpentDifferences
Taylor Swift 23 200
Joe Smith 30 -200

(注:如果需要表头的话,你可以手动加上,或者在awk脚本里加个判断输出表头的逻辑,比如检查是否是第一行时输出表头)

小提示

  • 如果你的FirstName或LastName包含空格(比如「Mary Ann」),这种用$1" "$2做键的方式会失效,这时候需要确保文件是用制表符分隔的,然后用$1和$2准确获取名字,或者调整键的生成逻辑。
  • 示例中我们用了file2里的Age,如果你想改用file1里的Age,只需要把print语句里的age_map[key]改成$3就行。

备注:内容来源于stack exchange,提问作者Biha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 13:28:07