Qual è il modo più rapido per ottenere la media di un insieme di numeri dalla riga di comando?

StackOverflow https://stackoverflow.com/questions/214363

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?

È stato utile?

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.

Ruby one liner

cat numbers.txt | ruby -ne 'BEGIN{$sum=0}; $sum=$sum+

Ruby one liner

<*>

source

.to_f; END{puts $sum/$.}'

source

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top