web-dev-qa-db-ja.com

bashを使用して、数値のリストから平均、最大、最小をどのようにして見つけることができますか?

私は、各行に1つずつ、数値のリストを生成する一連のパイプで接続されたgreps、awk、およびsedを持っています。このようなもの:

1.13
3.59 
1.23

これを平均、最大、最小を出力するものにパイプする方法を教えてください。

18
JavaRocky

すでに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}'
27
DerfK

このプログラムは、コマンドラインで数値リストの統計を生成するのに便利です。 http://web.cs.wpi.edu/~claypool/misc/stats/stats.html

4
ddrown

Simple-rもあり、Rとほぼ同じことができますが、キーストロークは少なくなります。

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

平均、最大、最小を計算するには、次のいずれかを入力する必要があります。

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

@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

0
Chris Koknat