【问题标题】:obtain averages of field 2 after grouping by field 1 with awk使用 awk 按字段 1 分组后获得字段 2 的平均值
【发布时间】:2014-01-03 14:07:06
【问题描述】:

我有一个文件,其中包含两个字段,其中包含我根据字段 1 进行数字排序的数字。字段 1 中的数字范围为 1 到 200000,字段 2 中的数字介于 0 和 1 之间。我想获得两者的平均值字段 1 和字段 2 分批(基于行)。

以下是指定 4 行批次时的示例输入输出:

1 0.12
1 0.34
2 0.45
2 0.40
50 0.60
301 0.12
899 0.13
1003 0.14
1300 0.56
1699 0.43
2100 0.25
2500 0.56

输出将是:

1.5 0.327
563.25  0.247
1899.75 0.45

【问题讨论】:

    标签: awk average


    【解决方案1】:

    给你:

    awk -v n=4 '{s1 += $1; s2 += $2; if (++i % n == 0) { print s1/n, s2/n; s1=s2=0; } }'
    

    解释:

    • 初始化n=4,批量大小
    • 收集总和:s1 中第一列的总和,s2 中第二列的总和
    • 计数器i加1(默认初始值为0,无需设置)
    • 如果i 可以被n 整除且没有余数,那么我们打印平均值,并重置总和变量

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-14
      • 1970-01-01
      相关资源
      最近更新 更多