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

如何计算每行累积平均值?现有awk命令输出全0求修正

修正awk命令计算累积平均值的问题

原始数据

1. 800
2. 900 
3. 1000
4. 1100
5. 1200

预期输出

1  800 # 800/1
2  850 #(800+900)/2
3  900 #(800+900+1000)/3
4  950 #(800+900+1000+1100)/4
5 1000 #(800+900+1000+1100+1200)/5

原命令的错误点

你给出的命令存在多处问题,导致输出全为0:

  • 命令开头的cat tcat test.txt是笔误,应为cat test.txt(或直接让awk读取文件,无需cat);
  • 每行处理时都执行sum=0,直接清空了累积的求和值;
  • for循环条件counter >=5逻辑错误,初始值counter=1不满足条件,循环一次都不会执行,sum始终为0;
  • 完全没必要手动写for循环遍历行,awk本身是逐行处理文本,可利用内置变量实现累积计算。

修正后的命令

基础版(仅输出行号与平均值)

awk '{ sum += $2; print NR, sum/NR }' test.txt

完全匹配预期输出版(带注释)

awk '{
    sum += $2
    avg = sum / NR
    # 构建求和表达式
    sum_expr = $2
    for (i=1; i<NR; i++) {
        sum_expr = arr[i] "+" sum_expr
    }
    # 格式化输出,匹配预期格式
    printf "%d %4d # %s/%d\n", NR, avg, (NR==1 ? sum_expr : "(" sum_expr ")"), NR
    # 存储当前数值到数组,用于后续拼接表达式
    arr[NR] = $2
}' test.txt

命令说明

  • sum += $2:逐行累积求和,sum在awk中默认初始为0,无需手动初始化;
  • NR:awk内置变量,表示当前处理的行数,正好对应预期输出的行号和分母;
  • 数组arr用于存储每行的数值,方便后续拼接求和表达式,实现和预期一致的注释内容;
  • printf用于格式化输出,保证数字对齐,匹配预期的格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 06:24:22