IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Faire la somme des lignes d'une variable


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 45
    Points : 21
    Points
    21
    Par défaut Faire la somme des lignes d'une variable
    Bonjour a tous,

    Je souhaiterais faire la somme des lignes d'une variable $toto qui contient:

    2257
    30
    200
    223

    Est-ce possible simplement?

    Merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Le plus simple: avec (g)awk:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $var | awk '{tot = tot + $0} END {print tot}'
    Sinon avec dc ça doit être possible également.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Recherche du travail
    Inscrit en
    Août 2004
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Recherche du travail

    Informations forums :
    Inscription : Août 2004
    Messages : 561
    Points : 1 320
    Points
    1 320
    Par défaut
    Ou sinon en plus simple:

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    On ne cherche pas le nombre de ligne mais le total des nombres non?

  5. #5
    Membre confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Points : 622
    Points
    622
    Par défaut
    var=0
    while read toto ; do
    var=$((var + toto))
    done < ton_fichier

    echo "Somme : $var"

  6. #6
    Membre éclairé Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Points : 823
    Points
    823
    Par défaut
    J'ai une autre solution.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo ${toto//
    /+} | bc
    Explications:
    D'abord, je remplace tous les \n par +. Là, je ne sais pas trop comment faire, donc j'ai mis le vrai retour-charriot, d'où le retour à la ligne. Ensuite je passe le résultat à la commande bc qui fait le calcul.

    Simple, non?

  7. #7
    Membre confirmé Avatar de Leeloo_Multiboot
    Profil pro
    Administrateur Unix/Linux
    Inscrit en
    Avril 2008
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur Unix/Linux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2008
    Messages : 417
    Points : 550
    Points
    550
    Par défaut
    Bonjour,

    Quand j'ai vu le titre du topic quelque chose m'a turlupiné
    Une variable Shell est une chaîne, comment est-ce possible d'avoir plusieurs lignes dans une variable?
    Comment le Shell fait-il pour interpréter le retour chariot dans une variable?
    Je suis avide de savoir

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Citation Envoyé par Leeloo_Multiboot Voir le message
    Bonjour,

    Quand j'ai vu le titre du topic quelque chose m'a turlupiné
    Une variable Shell est une chaîne, comment est-ce possible d'avoir plusieurs lignes dans une variable?
    Comment le Shell fait-il pour interpréter le retour chariot dans une variable?
    Je suis avide de savoir
    Une variable peut contenir des caractères non imprimables comme les retours à la ligne. Crée un fichier.test contenant:

    Ensuite on affecte le contenu du fichier.test à la variable var et on affiche de deux manières différentes. Tu verras que les \n sont bien présents dans la chaîne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var=$(<fichier.test)
    echo $var
    echo "$var"

  9. #9
    Membre éclairé Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Points : 823
    Points
    823
    Par défaut
    Les variables sont, en général, des chaînes de caractères. Or, le retour-charriot est un caractère, donc il peut être inséré dans les variables comme n'importe quel autre caractère.

    Pour vérifier, il suffit de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var="a
    b
    c"
    echo "$var"
    Ne pas oublier les doubles-quotes de echo.

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Citation Envoyé par jmelyn Voir le message
    ... Là, je ne sais pas trop comment faire, donc j'ai mis le vrai retour-charriot, d'où le retour à la ligne....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     echo "${toto//$'\x0A'/+}" # en hexa
     
     echo "${toto//$'\012'/+}"  # en octal

  11. #11
    Membre confirmé Avatar de Leeloo_Multiboot
    Profil pro
    Administrateur Unix/Linux
    Inscrit en
    Avril 2008
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur Unix/Linux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2008
    Messages : 417
    Points : 550
    Points
    550
    Par défaut
    Merci pour vos réponses

  12. #12
    Membre éclairé Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Points : 823
    Points
    823
    Par défaut
    Merci Ripat pour le truc. J'irai même encore plus loin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo ${toto//$'\n'/+} | bc
    Explications:
    Les mots commençant par $' sont traités spécialement: les caractères échappés sont remplacés par leur équivalent ASCII: \a, \b \e, \f, \n, \r, \t, \v, \\, \', \nnn, \xHH, \cx.
    Et ça marche aussi pour l'assignation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    toto=2257$'\n'30$'\n'200$'\n'223
    Malheureusement, Bash ne va pas interpréter $' entre double-quotes.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. somme des ligne d'une colonne
    Par ilyan dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 25/10/2010, 00h48
  2. la somme des lignes d'une colonne de StringGrid
    Par faniette dans le forum C++Builder
    Réponses: 12
    Dernier message: 26/05/2009, 10h08
  3. Somme des valeurs d'une variable
    Par stefsas dans le forum SAS Base
    Réponses: 2
    Dernier message: 03/06/2008, 14h49
  4. Afficher la somme des lignes d'une table
    Par DJERDJAR YACINE dans le forum Bases de données
    Réponses: 5
    Dernier message: 23/07/2007, 19h18
  5. faire la somme des montants d'une table
    Par nestam dans le forum Requêtes
    Réponses: 3
    Dernier message: 15/02/2007, 00h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo