使用 bash,如何从数字列表中找出平均值、最大值和最小值?

使用 bash,如何从数字列表中找出平均值、最大值和最小值?

我有一系列管道 greps、awks 和 seds,它们会生成一个数字列表,每行一个。如下所示:

1.13
3.59 
1.23

我如何将其通过管道传输到可以输出平均值、最大值和最小值的东西?

答案1

由于您已经在使用 awk

blahblahblah | awk '{if(min==""){min=max=$1}; if($1>max) {max=$1}; if($1<min) {min=$1}; total+=$1; count+=1} END {print total/count, max, min}'

答案2

我发现此程序对于在命令行上生成数字列表的统计数据很有用:http://web.cs.wpi.edu/~claypool/misc/stats/stats.html

答案3

还有 simple-r,它几乎可以完成 R 所能完成的所有功能,但所需的按键更少:

https://code.google.com/p/simple-r/

要计算平均值,最大值和最小值,必须输入以下之一:

r summary file.txt
r summary - < file.txt
cat file.txt | r summary -

答案4

您可以使用ministat

$ ministat -n
1.13
3.59 
1.23

x <stdin>
    N           Min           Max        Median           Avg        Stddev
x   3          1.13          3.59          1.23     1.9833333     1.3923122

并且使用,tail您可以提取单个字段,例如给出平均值(因为它:取最后一行;删除多余的空格;然后取该行上的第六个非空格标记)。sedcutministat -n | tail -1 | sed -r 's/ +/ /g;' | cut -d\ -f 6

相关内容