Qual é a maneira mais rápida de obter a média de um conjunto de números a partir da linha de comando?
-
03-07-2019 - |
Pergunta
Usando todas as ferramentas que você esperaria encontrar em um sistema nix (na verdade, se você quiser, msdos também é muito fina), qual é a maneira mais fácil / mais rápido para calcular a média de um conjunto de números, supondo que você tê-los um por linha em um fluxo ou arquivo?
Solução
Awk
awk '{total += $1; count++ } END {print total/count}'
Outras dicas
awk ' { n += $1 }; END { print n / NR }'
Esta acumula a soma em n
, em seguida, divide pelo número de itens (NR
= número de registros).
Obras de números inteiros ou reais.
Usando Num-Utils para UNIX:
average 1 2 3 4 5 6 7 8 9
perl -e 'while (<>) { $sum += $_; $count++ } print $sum / $count, "\n"';
Em PowerShell, seria
get-content .\meanNumbers.txt | measure-object -average
É claro, esse é o detalhado sintaxe. Se você digitou-lo usando pseudônimos,
gc .\meanNumbers.txt | measure-object -a
Usando o "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
Especifique uma opção para ver estatísticas individuais:
$ st numbers.txt --mean
5.5
(IMPORTANTE: Eu escrevi esta ferramenta:))
Perl.
@a = <STDIN>;
for($i = 0; $i < #@a; $i++)
{
$sum += $a[i];
}
print $a[i]/#@a;
advertência Emptor:. Meu sintaxe pode ser um pouco whiffly
Rubi um forro
cat numbers.txt | ruby -ne 'BEGIN{$sum=0}; $sum=$sum+$_.to_f; END{puts $sum/$.}'