Bash:从文件中读取非零值的行

0 unix bash

我有一个文件,其中包含每行一个数字的数字列表.我想找到文件中非零数字的平均值.

例如:文件是:

0.0
1.0
2.0
3.0
0.0
0.0
Run Code Online (Sandbox Code Playgroud)

我希望答案是2.0而不是1.0

我可以通过读取每一行,将其添加到一个总和,如果值不等于零则增加计数,并在最后计算总和/计数.

使用任何其他命令有更简单的方法吗?

Ken*_*ent 5

这个awk单线程进行过滤和平均计算:

awk '$0{s+=$0;c++}END{printf "%.1f\n",c?s/c:0}' file
Run Code Online (Sandbox Code Playgroud)

它输出:

2.0
Run Code Online (Sandbox Code Playgroud)

  • 作为一个非常小的改进,如果没有非零值,你可以用`c?s/c:0`(或类似的东西)替换最终的`s/c`,以避免除以0. (2认同)