使用awk按字段1分组后,获得字段2的平均值

使用awk按字段1分组后,获得字段2的平均值,awk,average,Awk,Average,我有一个包含两个字段的文件,其中包含我根据字段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.7

我有一个包含两个字段的文件,其中包含我根据字段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 -v n=4 '{s1 += $1; s2 += $2; if (++i % n == 0) { print s1/n, s2/n; s1=s2=0; } }'
说明:

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

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

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