使用awk按字段1分组后,获得字段2的平均值
我有一个包含两个字段的文件,其中包含我根据字段1进行数字排序的数字。字段1中的数字范围为1到200000,字段2中的数字范围为0到1。我想批量获得字段1和字段2的平均值(基于行) 以下是指定4行批次时的输入输出示例:使用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 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递增计数器
(默认初始值为0,无需设置)i
- 如果
可被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递增计数器
(默认初始值为0,无需设置)i
- 如果
可被i
整除且没有余数,则我们打印平均值,并重置总和变量n