使用 awk 可被 5 整除的列跳过行的平均值



我想计算文本文件第一列的平均值,跳过可被 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

简短的

awk解决方案:

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

输出:

5

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

最新更新