Faire la somme de nombres en shell

Petit pense bête pour la prochaine fois où j'aurai besoin de faire la somme d'une liste de nombres en shell (un nombre par ligne) :

cat my_file | awk '{total+=$1}END{print total}'

Par exemple, pour obtenir la taille totale des tables dans une base de données MySQL :

mysqlshow -i my_db '*' | tr -s ' ' | cut -d ' ' -f 14 | grep [0-9] | awk '{total+=$1}END{print total}'

» Commentaires

- KISS :) (#67666) par Kyusan le 11 Mars 2009 à 17:09
ça m'herisses le poil de voir un grep ou un awk suivit d'un awk alors que awk peut le faire lui même. :)

mysqlshow -i my_db '*' | awk '/[0-9]/ {total+=$14}END{print total}'

(j'ai supprimeer aussi le tr et cut, ça doit avoir le même comportement.

et pour le cat on peut faire la même chose :
awk '{total+=$1}END{print total}' my_file

:)

- mon awk est rouillé (#67667) par Damien le 11 Mars 2009 à 18:52
ouais j'avoue que mon awk est peu rouillé, merci pour l'info, l'essentiel est que ça marche :-)
- Et pour faire plus violent (#67668) par Metal3d le 12 Mars 2009 à 11:20
On peut aussi se passer de awk, parce que j'aime pas awk :), à coup de sed, bc et tail:

cat /tmp/numbers | sed 's/.*$/v+=&;print v;print "\n"/' | bc -l | tail -n1

L'intérêt ? "bc" est rapide, gère des fonctions mathématiques de sauvage... etc... du coup on peut faire:

cat /tmp/numbers | sed 's/.*$/v+=&; square=sqrt(v) ;print square;print "\n"/' | bc -l | tail -n1

qui permet d'avoir la racine carrée de la somme des nombres dans ton fichier...

Je sais, je sais... ma ligne est lourde à taper... mais laissez moi m'exprimer !
- mmmf (#67681) par krusaf le 20 Mars 2009 à 15:03
Je plussoie kyusan, par contre pour metal3d ... c'est pas le cas.

Remplacer un awk par une ligne de commande avec 4 pipes, bc aura beau être rapide, ça m'étonnerait que ça prenne moins de temps. En tout cas, ça prendra plus de ressources.

A tester ;)
- le shell le fait (#67957) par pir le 18 Septembre 2009 à 11:48
y a ptêt moyen de se débrouiller avec le shell pour se marrer un peu plus ?
echo $((2+3)) renvoie 5 en sh, bash et zsh
echo $[2+3] aussi en bash et zsh

» Trackback

Aucun trackback

Les trackacks sont désactivés

Flux RSS des billets

Flux RSS des billets

Rechercher sur pwet.fr

À retenir

Derniers commentaires

Archives

Nuage de tags

Bioutifoul photos

Quelques liens

Licence d'utilisation

Contenu sous Licence Creative Commons By-Sa

Sauf mentions spécifiques, les billets et les photos publiés sur ce site sont placés sous la licence Creative Commons by-sa.

Pour toute utilisation dépassant le cadre de cette licence, merci de me contacter par e-mail.

Login