2017-06-18 30 views
3

我想计算文本文件第一列的平均值,跳过可被5整除的行。作为示例,请考虑以下一组数据。使用awk可以被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

回答

2

AWK溶液:

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

输出:

5 

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