Salut, journal,
J'ai des fichiers de données assez gros sur lesquels je voudrais appliquer des traitements via quelques scripts dont certains tournent déjà (extraire le min, le max, la médiane sur telle ou telle colonne, etc...). Seulement voilà, je voudrais faire des moyennes aussi, et là pas moyen de trouver un utilitaire en ligne de commande qui me fasse la somme des arguments de l'entrée standard.
Ça existe ?
# Re: Somme en ligne de commande
Posté par . Takhi . Évalué à 1.
echo " v1 + v2 + v3" | bc -l
ca peut etre un début si tu arrives a bien formater la ligne de echo :)
# Re: Somme en ligne de commande
Posté par yodaz . Évalué à 1.
# Re: Somme en ligne de commande
Posté par Mathieu Pillard (site web personnel) . Évalué à 1.
# Re: Somme en ligne de commande
Posté par seginus . Évalué à 2.
# Re: Somme en ligne de commande
Posté par jm trivial (site web personnel) . Évalué à 5.
[^] # Re: Somme en ligne de commande
Posté par eolyte . Évalué à 2.
Seules contraintes à vérifier : le nombre d'arguments max que l'on peut passer en bash et le dépassement de capacité de $SUM
#! /bin/sh
SUM=0
# Tant qu'on n'a pas scanné tous les arguments, on continue
while [ "$#" -gt "0" ]
do
# On ajoute l'argument courant au résultats
SUM=$(($SUM+$1))
# On décale les arguments vers la gauche
shift
done
echo "Somme : $SUM"
[^] # Re: Somme en ligne de commande
Posté par kesako . Évalué à -1.
(ce n'est pas la version standard sur woody et solaris 2.8)
[^] # Re: Somme en ligne de commande
Posté par eolyte . Évalué à 0.
Parceque j'ai testé ce script sur ma woody avant de le poster ici, et il semblait fonctionner au poil.
La nuance se fait ptet dans des conditions "extèmes" ?
[^] # Re: Somme en ligne de commande
Posté par kesako . Évalué à 0.
solaris : bash --version
GNU bash, version 2.03.0(1)-release (sparc-sun-solaris)
Copyright 1998 Free Software Foundation, Inc.
> ./dd.sh 1 2 3
./dd.sh: syntax error at line 9: `SUM=$' unexpected
linux woody : bash --version
GNU bash, version 2.05a.0(1)-release (i386-pc-linux-gnu)
Copyright 2001 Free Software Foundation, Inc.
./dd.sh 1 2 3
Somme : 6
[^] # Re: Somme en ligne de commande
Posté par Pascal . Évalué à 0.
En effet, le script doit etre interprété avec le Bourne shell (/bin/sh)
Or sous Linux /bin/sh est un lien symbolique vers /bin/bash (le BASH), alors que sous solaris c'est vraiment /bin/sh qui interprète le script. Or le Bourne Shell ce n'est pas la meme chose que le Bash.
Tout devrait donc rentrer dans l'ordre en remplacant /bin/sh par /bin/bash.
P.S: Je ne suis pas du tout sur de ce que je raconte. Je n'ai pas de Solraris sous la main là.
[^] # Commentaire supprimé
Posté par Anonyme . Évalué à 0.
Ce commentaire a été supprimé par l’équipe de modération.
# Re: Somme en ligne de commande
Posté par Pierre . Évalué à 2.
# Re: Somme en ligne de commande
Posté par Hardy Damien . Évalué à 0.
Mais bon capucépolibre (mais c'est quand même tres impressionnant)
http://www.syncsort.com/(...)
Dam
# Re: Somme en ligne de commande
Posté par furai (site web personnel) . Évalué à 0.
s=0
while gets
s += $_
end
print s, "\n"
(de memoire de debutant)
[^] # Re: Somme en ligne de commande
Posté par furai (site web personnel) . Évalué à 0.
j'ai oublie la conversion en entier :
s += $_
s += $_.to_i
# Ruby rulez !!!
Posté par Cédric Foll . Évalué à 0.
cedric@follc:~/tmp$ cat toto
1
2
3
4
12
Number one:
cedric@follc:~/tmp$ ruby -e 'puts eval($stdin.gets(nil).split("\n").join("+"))' < toto
22
Number two:
cedric@follc:~/tmp$ ruby -e 's=0;while gets do s += $_.to_i end;puts s' < toto
22
[^] # Re: Ruby rulez !!!
Posté par Cédric Foll . Évalué à 0.
cedric@follc:~/tmp$ ruby -e 'for i in 1..100000;puts rand(10000000000000000);end' > toto
cedric@follc:~/tmp$ time ruby -e 's=0;while gets do s += $_.to_i end;puts s' < toto
499355529220014254738
real 0m1.828s
user 0m1.780s
sys 0m0.000s
Oui, je sais ça calme ;-)
# Re: Somme en ligne de commande
Posté par Arachne . Évalué à 0.
# Avec awk en une ligne ...
Posté par Lucas . Évalué à 1.
21
# Re: Somme en ligne de commande
Posté par Polaris . Évalué à 1.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.