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

使用awk编程按第一列分组对文件最后一列数值求和

awk按第一列分组累加最后一列数值的实现方法

原代码问题分析

你写的代码存在三个问题:

  • 未过滤* * *格式的无效分隔行,会导致异常计算
  • 没有按第一列做分组存储,仅针对单行做列求和后立即输出
  • 每次计算完单行就重置累加变量,无法实现跨行的分组累加

正确实现代码

awk '$1 != "*" { sum[$1] += $NF } END { for (k in sum) printf "%.8f    %.18g\n", k, sum[k] | "sort -n" }' input

代码逻辑说明

  • $1 != "*":匹配第一个字段不是*的有效数值行,直接跳过分隔行
  • sum[$1] += $NF:以第一列的值为数组下标,将当前行最后一列的数值累加到对应下标存储的结果中
  • END块为所有行处理完成后执行的逻辑:
    • 遍历累加数组sum的所有键
    • printf指定输出格式:第一列保留8位小数和原输入格式对齐,第二列用%.18g保证浮点精度不丢失
    • 管道到sort -n:对输出结果按第一列数值升序排序,和预期输出顺序一致

输出结果

执行后得到的结果完全符合需求:

1.00000000    0.000215890266919365
2.00000000    0.00423890266919365
3.00000000    0.00112948567706805
4.00000000    0.000814742838534025

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:36:03