使用awk将列跳过行的平均值除以5

时间:2017-06-18 21:49:39

标签: bash awk

我想计算文本文件第1列的平均值,跳过可被5整除的行。例如,请考虑以下数据集。

1
2
3
4
5
6
7
8
9
10

对于上述数据,我可以使用awk计算整个列的平均值

awk '{ sum += $1 } END { if (NR > 0) print sum / NR }' file

打印结果5.5

如何扩展此代码以排除可从平均值中除以5的行?对于上面给出的示例,这将从平均值中排除数字510,从而产生新的5平均值。

1 个答案:

答案 0 :(得分:2)

awk 解决方案:

awk '{ NR%5? s+=$0 : c++ }END{ print s/(NR-c) }' file

输出:

5
  • NR%5? s+=$0 : c++ - 三元条件:如果记录号s+=$0不能被NR整除,则对所有值5求和,否则 - 计算跳过的记录(从平均值计算中减去它们) )