我想计算文本文件第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的行?对于上面给出的示例,这将从平均值中排除数字5
和10
,从而产生新的5
平均值。
答案 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
求和,否则 - 计算跳过的记录(从平均值计算中减去它们) )