Wie kann ich mit bash aus einer Zahlenliste den Durchschnitt, das Maximum und das Minimum ermitteln?

18

Ich habe eine Reihe von Greps, Awks und Seds, die eine Liste von Zahlen erzeugen, eine in jeder Zeile. Etwas wie das:

1.13
3.59 
1.23

Wie kann ich das zu etwas leiten, das den Durchschnitt, das Maximum und das Minimum ausgibt?

JavaRocky
quelle
Wenn Sie grep, awk und sed miteinander verbinden, können Sie das gleiche häufig mit einem Aufruf von awk tun.
Bis auf weiteres angehalten.

Antworten:

27

Da Sie bereits awk verwenden

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}'
DerfK
quelle
Schön, es funktioniert bei mir!
JavaRocky
Ich dachte, es gäbe bereits eine Binärdatei, die eine Liste von Zahlen und die Anzahl, durchschn., Min., Max. Für Sie annimmt.
JavaRocky
1
Ich würde einfach das obige awkMuster /usr/local/bin/statseinfügen und es dann als verwenden blabla | stats.
Acumenus
0

Es gibt auch simple-r, das fast alles kann, was R kann, aber mit weniger Tastenanschlägen:

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

Um Durchschnitt, Maximum und Minimum zu berechnen, müsste man Folgendes eingeben:

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

Mit einem Tipp auf @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] ist der Wert im ersten (0.) Feld jeder Zeile

Wenn Ihre Eingabedaten durch Kommas getrennt sind, fügen Sie den -F,Modifikator vor-lane

Chris Koknat
quelle