Bonjour,
j'ai un fichiers de 100 lignes où il y a un chiffre sur chacune d'elle.
Comment faire pour additionner tous ces chiffres ?
avec expr ? ou autre ?
merci
Version imprimable
Bonjour,
j'ai un fichiers de 100 lignes où il y a un chiffre sur chacune d'elle.
Comment faire pour additionner tous ces chiffres ?
avec expr ? ou autre ?
merci
expr fera l'affaire.
ok mais c'est la boucle que je n'arrive pas à visualiser pour addittionner chaque ligne
Soit le fichier chiffres.txt contenant les lignes avec les chiffres, on va considérer d'ailleurs qu'il n'y a qu'un chiffre sur chaque ligne de ce fichier.
Code:
1
2
3
4
5
6
7 #!/bin/bash valeur=0 for i in `cat chiffres.txt` ; do valeur=`expr $valeur + $i` done echo $valeur
Pour faire dans la diversité, voici une autre solution, ni meilleure ni plus mauvaise que celle de CedrX:
Code:
1
2
3
4
5
6
7 #!/bin/bash valeur=0 while read number do valeur=$(( $valeur + $number )) done < chiffres.txt echo $valeur
Infiniment c'est clair. Au moins ça ... :roll:Citation:
Elle est infiniment meilleure que celle de CedrX.
Oui, je trouve ta méthode mauvaise. Désolé si je t'ai vexé mais une des solutions est meilleure que l'autre, et je pense qu'il fallait le signaler.
Et je suis infiniment d'accord avec toi :hola:
Effectivement elle est plus gourmande en mémoire. je concède.
De là à dire qu'elle est infiniment plus mauvaise...
Mais bon il y a des gens qui proposent des solutions et d'autres qui critiquent c'est bien connu
Signaler qu'une solution est meilleure qu'une autre est une chose.
Utiliser un superlatif tel que "infiniment" en est une autre.
Il faut être précis et expliquer ses choix. Utiliser un superlatif disproportionné c'est exagérer et ça n'est pas être clair.
Je suis également d'accord : autant éviter expr, en plus ça évite une dépendance et bash sait évaluer tout seul, donc autant en abuser.
Merci à tous pour vos interventions constructives.
C'est précisément ce que j'ai fait.
Le problème n'est pas le expr, c'est le "for i in ..." qui ne peut pas être utilisé si la ligne contient des espaces, et qui est aussi une moins bonne solution en termes de performance. Il n'y a aucune raison de préférer cette solution à l'autre ; "infiniment" me semble donc justifié.
J'arrête avec ce thread avant de heurter trop de sensibilités...
Et cette méthode vous en pensez quoi ?:lol:
PS outre le fait que je ne suis pas certain que cette écriture soit possible en bash (que je n'utilise jamais), je ne me vexerais pas si on me dit que cette méthode est infiniment merdique ;)Code:
1
2
3
4
5
6
7
8 #!/bin/ksh valeur=0 while read number do (( valeur += number )) done < chiffres.txt echo $valeur
Ben non c'est pas infiniment merdique, c'est très bien ;)
Ce qui me fait penser d'ailleurs que dans la solution de jmelyn, il vaut mieux faire $(( valeur + number )) plutôt que $(( $valeur + $number ))
Le côté technique de ce fil est très intéressant, plein de bonnes choses à en retirer. Merci à tous les intervenants, même à Ohemeg qui a posé la question!
Le côté jugement me semble superfétatoire car il risque d'embrouiller les lecteurs et choquer la personne visée. Nous sommes ici par plaisir et pour l'enrichissement mutuel. Chacun peut faire des erreurs (et je suis le premier), ne pas connaître certains aspects de la chose discutée, mais nul n'est tenu à la perfection, je crois. Tentons, essayons, changeons... à plusieurs le résultat est généralement meilleur que sorti d'une seule cervelle.
Bon weekend à ceux qui quittent le clavier pour ces deux jours.
Merci à tous pour votre participation actives et désolé d'avoir semé un peu de zizanie :?
sinon que signifie les (( et ))
merci
Pour Bash, $(( 1 + 1 )) permet de faire des traitements arithmétiques plutôt qu'alphabétiques. Donc le résultat est 2. Cela correspond à `expr 1 + 1` ou $(expr 1 + 1).
Pour Ksh il suffit de faire (( 1 + 1 )).
si mes souvenir sont bons, pour ksh
est strictement identique àCode:
1
2 (( 1 + 1 ))
Code:
1
2 let 1 + 1