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


18

我有一系列管道状的抓钩,awk和sed,它们产生一个数字列表,每行一个。像这样:

1.13
3.59 
1.23

如何将其传递到将输出平均值,最大值和最小值的东西?


如果将grep,awk和sed一起管道传输,则通常可以在一次awk调用中完成同一件事。
暂停,直到另行通知。

Answers:


27

由于您已经在使用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}'

很好,对我有用!
JavaRocky 2011年

我以为已经有一个二进制文件,可以接受数字列表,并且可以为您提供计数,平均,最小值,最大值,有点像使用“时间”。
JavaRocky 2011年

1
我只是将上面的awk样式放入其中/usr/local/bin/stats,然后将其用作blabla | stats
Acumenus


0

还有一个simple-r,它几乎可以完成R所能完成的所有工作,但击键次数却更少:

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

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

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

0

顶一下@DerfK:

perl -lane '$n=$F[0]; if(not defined $min){$min=$max=$n}; if($n>$max){$max=$n}; if($n<$min){$min=$n}; $total+=$n; $count+=1; END{print $total/$count." $max $min"}'

$F[0] 是每行第(0')字段中的值

如果输入数据以逗号分隔,请在-F,前面添加修饰符-lane

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.