Quel est le moyen le plus rapide d'obtenir la moyenne d'un ensemble de nombres à partir de la ligne de commande?
-
03-07-2019 - |
Question
En utilisant les outils que vous espérez trouver sur un système nix (en fait, si vous le souhaitez, msdos convient également), quel est le moyen le plus simple et le plus rapide de calculer la moyenne d'un ensemble de nombres, en supposant en avez-vous une par ligne dans un flux ou un fichier?
La solution
Awk
awk '{total += $1; count++ } END {print total/count}'
Autres conseils
awk ' { n += $1 }; END { print n / NR }'
Ceci accumule la somme dans n
, puis divise par le nombre d'éléments ( NR
= Nombre d'enregistrements).
Fonctionne pour les entiers ou les réels.
Utilisation de Num-Utils pour UNIX:
average 1 2 3 4 5 6 7 8 9
perl -e 'while (<>) { $sum += <*>; $count++ } print $sum / $count, "\n"';
À Powershell, ce serait
get-content .\meanNumbers.txt | measure-object -average
Bien sûr, c'est la syntaxe détaillée. Si vous l'avez tapé à l'aide d'alias,
gc .\meanNumbers.txt | measure-object -a
Utilisation de & st; 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
Spécifiez une option pour afficher les statistiques individuelles:
$ st numbers.txt --mean
5.5
(CLAUSE DE NON-RESPONSABILITÉ: j'ai écrit cet outil:))
Perl.
@a = <STDIN>;
for($i = 0; $i < #@a; $i++)
{
$sum += $a[i];
}
print $a[i]/#@a;
Caveat Emptor: Ma syntaxe est peut-être un peu floue.