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?


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}'

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 -

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.