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
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
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 #!/bin/bash valeur=0 while read number do valeur=$(( $valeur + $number )) done < chiffres.txt echo $valeur
Un problème bien posé est déjà résolu (H. Bergson).
Infiniment c'est clair. Au moins ça ...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
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.
Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux
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 ?
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.
Un problème bien posé est déjà résolu (H. Bergson).
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 )).
Un problème bien posé est déjà résolu (H. Bergson).
si mes souvenir sont bons, pour ksh
est strictement identique à
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 (( 1 + 1 ))
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 let 1 + 1
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager