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

如何用awk实现字符串模糊匹配并计算对应计划收益

解决方案:用Awk处理双文件实现计划匹配与收益计算

核心思路

先从plans.txt中读取所有计划的月度费用并存储为关联数组;再遍历main.txt,根据服务器归属判断对应标准计划类型,统一替换原始计划名后,用使用数量乘以标准计划的费用计算收益。

完整Awk代码

BEGIN {
    # 定义服务器与对应标准计划的映射规则
    server_map["server1.domain"] = "NewClusterA"
    server_map["server2.domain"] = "NewClusterA"
    server_map["server3.domain"] = "NewClusterB"
    server_map["server4.domain"] = "NewClusterB"
    
    # 输出表头,格式化对齐
    printf "%-20s %-15s %-20s %s\n", "服务器", "计划数量", "标准计划名称", "收益"
    printf "%-20s %-15s %-20s %s\n", "--------", "----------", "-------------------", "------"
}

# 处理第一个文件plans.txt,存储计划费用
NR == FNR {
    plan_cost[$1] = $2
    next
}

# 处理第二个文件main.txt,计算并输出结果
{
    server = $1
    original_plan = $2
    count = $3
    
    # 跳过不在规则内的服务器
    if (!(server in server_map)) next
    
    target_plan = server_map[server]
    # 校验原始计划是否属于对应集群(A/B)
    if ((target_plan == "NewClusterA" && original_plan !~ /ClusterA$/) || 
        (target_plan == "NewClusterB" && original_plan !~ /ClusterB$/)) {
        next
    }
    
    # 计算收益
    revenue = count * plan_cost[target_plan]
    
    # 格式化输出结果
    printf "%-20s %-15d %-20s %.2f\n", server, count, target_plan, revenue
}

使用步骤

  1. 将上述代码保存为calculate_revenue.awk文件
  2. 在终端执行以下命令(需确保plans.txt和main.txt在当前目录):
awk -f calculate_revenue.awk plans.txt main.txt

代码说明

  • BEGIN块:初始化服务器-计划映射关系,输出对齐的表头。
  • NR==FNR块:仅处理第一个输入文件plans.txt,将计划名作为键、费用作为值存入数组,next跳过后续逻辑,避免干扰第二个文件的处理。
  • main.txt处理块:提取每行的服务器、原始计划、数量字段,校验服务器是否符合规则、原始计划是否匹配对应集群,最后计算并输出格式化的结果。

示例输入与输出

示例plans.txt内容:
NewClusterA 100
OldClusterA 90
NewClusterB 150
OldClusterB 140

示例main.txt内容:
server1.domain OldClusterA 2
server2.domain NewClusterA 3
server3.domain OldClusterB 1
server4.domain NewClusterB 4
server5.domain NewClusterA 2 # 不在规则内,会被跳过

执行命令后输出:

服务器                计划数量          标准计划名称          收益
--------             ----------       -------------------   ------
server1.domain       2                NewClusterA          200.00
server2.domain       3                NewClusterA          300.00
server3.domain       1                NewClusterB          150.00
server4.domain       4                NewClusterB          600.00

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:42:49