bashを使用して、数字のリストから平均、最大、および最小を見つけるにはどうすればよいですか?


18

パイプラインのgreps、awks、sedsのシリーズがあり、各行に1つずつ数字のリストを作成します。このようなもの:

1.13
3.59 
1.23

これを平均、最大、最小を出力するものにパイプするにはどうすればよいですか?


grep、awk、およびsedを一緒にパイピングしている場合、awkの1回の呼び出しで同じことがよく行われます。
追って通知があるまで一時停止します。

回答:


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

数字のリストと、「時間」を使用するようなカウント、avg、min、maxを受け入れるバイナリがすでにあると思いました。
JavaRocky

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.