Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Linux > Applications > Shell

Shell Vos questions sur l'utilisation des commandes shell

Réponse
 
Outils de la discussion
Vieux 13/11/2008, 15h22   #1 (permalink)
Futur Membre du Club
 
Date d'inscription: février 2008
Messages: 37
Par défaut calculer une liste de chiffres

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
Ohemeg est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 13/11/2008, 16h06   #2 (permalink)
Membre Expert
 
Date d'inscription: octobre 2005
Localisation: Saint-Martin de Boscherville
Âge: 29
Messages: 1 394
Envoyer un message via MSN à iohack
Par défaut

expr fera l'affaire.
iohack est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 13/11/2008, 16h15   #3 (permalink)
Futur Membre du Club
 
Date d'inscription: février 2008
Messages: 37
Par défaut

ok mais c'est la boucle que je n'arrive pas à visualiser pour addittionner chaque ligne
Ohemeg est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 13/11/2008, 19h52   #4 (permalink)
Rédacteur/Modérateur
 
Avatar de CedrX
 
Date d'inscription: avril 2007
Messages: 339
Par défaut

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 :
#!/bin/bash
valeur=0
for i in `cat chiffres.txt` ; do
        valeur=`expr $valeur + $i`
done
echo $valeur
CedrX est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 14/11/2008, 09h42   #5 (permalink)
Membre Confirmé
 
Date d'inscription: septembre 2007
Localisation: Genève
Âge: 45
Messages: 272
Par défaut

Pour faire dans la diversité, voici une autre solution, ni meilleure ni plus mauvaise que celle de CedrX:
Code :
#!/bin/bash
valeur=0
while read number
do
    valeur=$(( $valeur + $number ))
done < chiffres.txt
echo $valeur
jmelyn est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 14/11/2008, 12h53   #6 (permalink)
Membre éprouvé
 
Date d'inscription: octobre 2008
Âge: 30
Messages: 416
Par défaut

Citation:
Envoyé par jmelyn Voir le message
Pour faire dans la diversité, voici une autre solution, ni meilleure ni plus mauvaise que celle de CedrX
Elle est infiniment meilleure que celle de CedrX. Pas à cause du choix de $(( ... )) au lieu de expr, mais parce que celle de CedrX va merder si les lignes contiennent des espaces. Elle est aussi beaucoup plus gourmande en mémoire.
matafan est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 14/11/2008, 12h58   #7 (permalink)
Rédacteur/Modérateur
 
Avatar de CedrX
 
Date d'inscription: avril 2007
Messages: 339
Par défaut

Citation:
Elle est infiniment meilleure que celle de CedrX.
Infiniment c'est clair. Au moins ça ...
CedrX est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 14/11/2008, 13h17   #8 (permalink)
Membre éprouvé
 
Date d'inscription: octobre 2008
Âge: 30
Messages: 416
Par défaut

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.
matafan est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 14/11/2008, 13h24   #9 (permalink)
Rédacteur/Modérateur
 
Avatar de CedrX
 
Date d'inscription: avril 2007
Messages: 339
Par défaut

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
CedrX est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 14/11/2008, 13h24   #10 (permalink)
Modérateur
 
Avatar de ggnore
 
Date d'inscription: juillet 2004
Localisation: Made in normandy
Âge: 30
Messages: 2 139
Par défaut

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.
__________________
Donne un poisson à un homme et tu le nourris pour un jour,
Apprends-lui à pêcher et tu le nourris pour toujours.
ggnore est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 14/11/2008, 13h37   #11 (permalink)
Membre éprouvé
 
Date d'inscription: octobre 2008
Âge: 30
Messages: 416
Par défaut

Citation:
Envoyé par ggnore Voir le message
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.
C'est précisément ce que j'ai fait.
Citation:
Envoyé par ggnore Voir le message
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.
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...
matafan est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 14/11/2008, 14h04   #12 (permalink)
Membre Expert
 
Date d'inscription: octobre 2005
Localisation: Saint-Martin de Boscherville
Âge: 29
Messages: 1 394
Envoyer un message via MSN à iohack
Par défaut

Et cette méthode vous en pensez quoi ?

Code :
#!/bin/ksh
valeur=0
while read number
do
    (( valeur += number ))
done < chiffres.txt
echo $valeur
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
iohack est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 14/11/2008, 14h08   #13 (permalink)
Membre éprouvé
 
Date d'inscription: octobre 2008
Âge: 30
Messages: 416
Par défaut

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 ))
matafan est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 14/11/2008, 14h11   #14 (permalink)
Membre Confirmé
 
Date d'inscription: septembre 2007
Localisation: Genève
Âge: 45
Messages: 272
Par défaut

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.
jmelyn est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 14/11/2008, 14h35   #15 (permalink)
Futur Membre du Club
 
Date d'inscription: février 2008
Messages: 37
Par défaut

Merci à tous pour votre participation actives et désolé d'avoir semé un peu de zizanie

sinon que signifie les (( et ))

merci
Ohemeg est déconnecté   Envoyer un message privé Réponse avec citation
NEWS LINUX PROFESSIONNELFAQ LINUXTUTORIELS LINUXLIVRES LINUXLINUX TVUNIXGTK+QtAPACHE

Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Linux > Applications > Shell



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide