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

Linux Discussion :

Faire la somme de 2 listes en shell


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    ingénieur
    Inscrit en
    Septembre 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 54
    Par défaut Faire la somme de 2 listes en shell
    Bonjour,

    voila je souhaiterais savoir comment faire la somme de 2 listes ?

    Par exemple ce script qui prend en argument des éléments pour faire une liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     
    #! /bin/bash
    j=`echo $#`
    k=0
    while [ $k -lt $j ]
    do
    for i in `echo $@`
    do
    tub[$k]=$i
    k=`expr $k + 1`
    done
    done
    echo ${tub[*]}
    echo ${#tub[*]}
     
    [root@DELTA /]# ./table 1 2 5 k lo p
    1 2 5 k lo p
    6
    Mon but serait de créer 2 listes et d'en faire la somme dans une 3 eme liste, j'ai essayé de trouver une façon de le faire, mais je rentre dans de multiple boucles, variable etc.. et cela n'optimise pas tellement le code, donc si vous avez une idée de comment faire plus simple je suis perneur, merci d'avance.

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Code ./liste : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/bin/bash
     
    maListe=( "$@" )
    echo "${maListe[@]}"
    echo ${#maListe[@]}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ./liste 1 2 5 "k a" lo p
    1 2 5 k a lo p
    6
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre confirmé
    Profil pro
    ingénieur
    Inscrit en
    Septembre 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 54
    Par défaut
    Oh désolé, j'ai pas été très claire

    En faite le but est de disposer de deux listes avec des chiffres :

    list1 = 1, 2, 3, 4,5
    list2 = 6, 7, 8, 9, 10

    et d'avoir une 3ème liste avec comme éléments les résultats des sommes des 2 premières listes :

    list3 =7,9,11,13,15

    Voilà merci pour votre retour

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #!/bin/bash
     
    list1=( 1 2 3 4 5 )
    list2=( 6 7 8 9 10 11)
     
    test() {
       var="${@}"
       myArr1=( ${var%%,*} )
       myArr2=( ${var##*,} )
       for (( x=0; x<${#myArr1[@]}; x++ ))
       do echo $(( ${myArr1[x]} + ${myArr2[x]:-0} ))
       done
    }
     
    if (( ${#list1[@]} >= ${#list2[@]} ))
    then list3=( $(test "${list1[@]}","${list2[@]}") )
    else list3=( $(test "${list2[@]}","${list1[@]}") )
    fi
    echo ${list3[@]}
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre confirmé
    Profil pro
    ingénieur
    Inscrit en
    Septembre 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 54
    Par défaut
    Bonjour,


    merci pour la réponse, et en effet ça marche, mais pourrais-tu m'éclairer sur cette partie du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    test() {
       var="${@}"
       myArr1=( ${var%%,*} )
       myArr2=( ${var##*,} )
       for (( x=0; x<${#myArr1[@]}; x++ ))
       do echo $(( ${myArr1[x]} + ${myArr2[x]:-0} ))
       done
    Que fait le test exactement ? ces deux variables agissent comment sur les listes ? :

    myArr1=( ${var%%,*} )
    myArr2=( ${var##*,} )

    Enfin, sur cette partie :

    do echo $(( ${myArr1[x]} + ${myArr2[x]:-0} ))

    que signifie ":-0}" ?

    Merci pour tes réponses.

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    -
    myArr1=( ${var%%,*} )
    j'alimente un tableau/liste avec le contenu de $var, jusqu'au séparateur arbitraire `,'
    myArr2=( ${var##*,} )
    pareil à partir du séparateur arbitraire
    ${myArr2[x]:-0}
    si il n'y a plus d'élément dans le tableau/liste, alors utiliser zéro

    regarde la partie sur la substitution des paramètres dans le man de bash

    -
    l'utilisation d'une boucle for dans le style C, oblige à itérer sur le tableau comprenant le nombre d'éléments le plus important
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. [AC-2003] Faire la somme des valeurs contenus dans plusieurs listes déroulantes
    Par kavuza dans le forum VBA Access
    Réponses: 3
    Dernier message: 08/08/2012, 10h21
  2. Réponses: 9
    Dernier message: 25/01/2012, 17h07
  3. [SP-2010] Faire une somme sur une colonne d'une liste
    Par sebfreu dans le forum SharePoint
    Réponses: 6
    Dernier message: 19/01/2012, 11h05
  4. Réponses: 15
    Dernier message: 21/05/2010, 00h36
  5. Réponses: 1
    Dernier message: 23/01/2007, 18h23

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