Qual è il modo più rapido per ottenere la media di un insieme di numeri dalla riga di comando?
-
03-07-2019 - |
Domanda
Usando tutti gli strumenti che ti aspetteresti di trovare su un sistema nix (in effetti, se vuoi, anche msdos va bene), qual è il modo più semplice / veloce per calcolare la media di un insieme di numeri, supponendo che tu ne hai uno per riga in uno stream o in un file?
Soluzione
Awk
awk '{total += $1; count++ } END {print total/count}'
Altri suggerimenti
awk ' { n += $1 }; END { print n / NR }'
Questo accumula la somma in n
, quindi si divide per il numero di elementi ( NR
= Numero di record).
Funziona per numeri interi o reali.
Uso di Num-Utils per UNIX:
average 1 2 3 4 5 6 7 8 9
perl -e 'while (<>) { $sum += <*>; $count++ } print $sum / $count, "\n"';
In Powershell, sarebbe
get-content .\meanNumbers.txt | measure-object -average
Naturalmente, questa è la sintassi dettagliata. Se lo hai digitato usando gli alias,
gc .\meanNumbers.txt | measure-object -a
Uso di " 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
Specifica un'opzione per visualizzare le singole statistiche:
$ st numbers.txt --mean
5.5
(NOTA BENE: ho scritto questo strumento :))
Perl.
@a = <STDIN>;
for($i = 0; $i < #@a; $i++)
{
$sum += $a[i];
}
print $a[i]/#@a;
Caveat Emptor: la mia sintassi potrebbe essere un po 'soffice.