J'ai une série de greps, awks et seds canalisés qui produisent une liste de nombres, un sur chaque ligne. Quelque chose comme ça:
1.13
3.59
1.23
Comment puis-je diriger cela vers quelque chose qui produira la moyenne, le max et le min?
J'ai une série de greps, awks et seds canalisés qui produisent une liste de nombres, un sur chaque ligne. Quelque chose comme ça:
1.13
3.59
1.23
Comment puis-je diriger cela vers quelque chose qui produira la moyenne, le max et le min?
Réponses:
Puisque vous utilisez déjà awk
blahblahblah | awk '{if(min==""){min=max=$1}; if($1>max) {max=$1}; if($1<min) {min=$1}; total+=$1; count+=1} END {print total/count, max, min}'
awk
modèle ci-dessus dans /usr/local/bin/stats
ou tel, puis l'utiliser comme blabla | stats
.
Je trouve ce programme utile pour générer des statistiques sur des listes de nombres sur la ligne de commande: http://web.cs.wpi.edu/~claypool/misc/stats/stats.html
Il y a aussi simple-r, qui peut faire presque tout ce que R peut faire, mais avec moins de touches:
https://code.google.com/p/simple-r/
Pour calculer la moyenne, le max et le min, il faudrait taper l'un de:
r summary file.txt
r summary - < file.txt
cat file.txt | r summary -
Avec un coup de chapeau à @DerfK:
perl -lane '$n=$F[0]; if(not defined $min){$min=$max=$n}; if($n>$max){$max=$n}; if($n<$min){$min=$n}; $total+=$n; $count+=1; END{print $total/$count." $max $min"}'
$F[0]
est la valeur dans le premier (0'ème) champ de chaque ligne
Si vos données d'entrée sont séparées par des virgules, ajoutez le -F,
modificateur avant-lane