Was ist der schnellste Weg, den Mittelwert einer Reihe von Zahlen von der Kommandozeile zu bekommen?
-
03-07-2019 - |
Frage
irgendwelche Werkzeuge zu verwenden, die Sie auf einem nix System zu finden erwarten würden (in der Tat, wenn Sie wollen, msdos ist auch zu fein), was ist der einfachste / schnellste Weg, den Mittelwert einer Reihe von Zahlen zu berechnen, Sie unter der Annahme, haben sie eine pro Zeile in einem Stream oder einer Datei?
Lösung
Awk
awk '{total += $1; count++ } END {print total/count}'
Andere Tipps
awk ' { n += $1 }; END { print n / NR }'
Dieses sammelt sich die Summe in n
, teilt dann durch die Anzahl der Elemente (NR
= Anzahl der Datensätze).
Werke für ganze Zahlen oder reelle Zahlen.
Mit Num-utils für UNIX:
average 1 2 3 4 5 6 7 8 9
perl -e 'while (<>) { $sum += $_; $count++ } print $sum / $count, "\n"';
In Powershell, es wäre
get-content .\meanNumbers.txt | measure-object -average
Natürlich, das ist die ausführliche Syntax. Wenn Sie es mit Aliasnamen eingegeben hat,
gc .\meanNumbers.txt | measure-object -a
Mit "st" ( https://github.com/nferraz/st ):
$ st numbers.txt
N min max sum mean sd
10.00 1.00 10.00 55.00 5.50 3.03
eine Option angeben individuelle Statistiken, um zu sehen:
$ st numbers.txt --mean
5.5
(HAFTUNGSAUSSCHLUSS: Ich schrieb dieses Werkzeug))
Perl.
@a = <STDIN>;
for($i = 0; $i < #@a; $i++)
{
$sum += $a[i];
}
print $a[i]/#@a;
Gewährleistungsausschluß. Meine Syntax kann ein wenig whiffly sein