我想计算文本文件第一列的平均值,跳过可被 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 整除的行?对于上面给出的示例,这将从平均值中排除5
和10
的数字,从而产生新的平均值 5
。
简短的
awk解决方案:
awk '{ NR%5? s+=$0 : c++ }END{ print s/(NR-c) }' file
输出:
5
-
NR%5? s+=$0 : c++
- 三元条件:如果记录编号NR
不能被5
整除,则对所有值求s+=$0
,否则 - 计算跳过的记录(从平均计算中减去它们(