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 :

[shell] [débutante] récupérer une liste de valeur dans un tableau


Sujet :

Linux

  1. #1
    Membre du Club
    Inscrit en
    Juin 2003
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 55
    Points : 41
    Points
    41
    Par défaut [shell] [débutante] récupérer une liste de valeur dans un tableau
    Bonjour,

    voila, j'ai une variable qu'on va appeler $var qui contient
    une info de ce type la :
    "blabla ----- 41 42 43 44"
    Toutes les données sont séparées par des espaces. Par
    contre, je ne sais pas combien de chiffres sont renvoyés
    exactement (ici 4 : 41, 42, 43, 44)
    je voudrais récupérer les uns après les autres chacuns de
    ces chiffres et leur appliquer un traitement particulier. j'avais commencé par faire un truc dans ce
    style la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for i in $(seq 3 $nbFin)
    do
    tmp=$( echo "\$$i")
    id=$( echo $var | awk ' BEGIN { FS=" "; } { print $tmp ;} ' )
    [...]
    done

    $nbFin correspond au nombre d'élement présent dans ma
    variable $var (ici 6). Je récupère cette donnée un peu plus
    tot dans mon programme.

    $tmp était sencé me donner la position à récupérer ($3, $4,
    $5....) mais ça ne fonctionne pas une fois dans ma ligne de
    commande awk.

    J'avais testé une autre solution, mais qui elle non plus ne fonctionne pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    id=$( echo $coupe | awk  ' BEGIN { FS=" "; } { for(i=3;i<=NF;i++) print $i ;} ' )
    je pensais par la suite que ma variable $id serait considéré comme un tableau et que je pourrais ainsi récupéré chacun de mes chiffres à l'aide d'une boucle for ( $id[$i] ). Mais la encore ça ne fonctionne pas.

    Sauriez vous comment je peux m'y prendre pour récupérer un par un chacun de mes chiffres ?

    Merci d'avance

    Emilie

  2. #2
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Une solution serait de parcourir tous les elements de var et de ne travailler que sur ceux qui sont des entiers numeriques (eventuellement negatifs):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #!/bin/ksh
     
    export var="blabla ----- 41 42 43 44"
     
    for v in ${var} ; do
      if [[ ${v} = ?([-+])+([0-9]) ]] ; then
        echo ${v}
      fi
    done
    Evidemment, cela suppose que var ne contient pas d'autres chiffres que tu voudrais ignorer.
    Si tu preferes, tu peux convertir var en tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #!/bin/ksh
     
    export var="blabla ----- 41 42 43 44"
     
    set -A array ${var}
     
    NELEM=${#array[*]}
     
    i=0
    while [ ${i} -lt ${NELEM} ] ; do
      echo ${array[$i]}
      let i+=1
    done
    La, il faut connaitre les indices sur lesquels tu veux travailler (peut-etre que le premier chiffre se trouve toujours a la meme place?).

  3. #3
    Membre du Club
    Inscrit en
    Juin 2003
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 55
    Points : 41
    Points
    41
    Par défaut
    Merci pour ta réponse, c'est ce qu'il me fallait.

    On m'a également proposé cette solution, pour ceux que ça interresse :
    - le awk permet de récupérer chaque élément de $var, séparé par un espace
    - les grep supprime tous les éléments indésirables (ID, les tirets...)
    - le while permet de parcourir chaque élément restant, c'est à dire mes chiffres ($chiffre)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    echo $var | awk ' BEGIN { RS=" "; } { print $0; } ' | grep -v "^blabla" | grep -v -E "^--" | grep -v "^$" | while read chiffre
    	do
                    echo $chiffre
            done

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

Discussions similaires

  1. Recherche d'une liste de valeurs dans une autre
    Par charlebakhtovsky dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 07/02/2011, 10h20
  2. Récupérer une liste de variables dans un fichier
    Par livre dans le forum Langage
    Réponses: 4
    Dernier message: 10/03/2010, 14h22
  3. Réponses: 13
    Dernier message: 06/02/2010, 17h53
  4. insérer une liste de valeurs dans une colonne
    Par ecdxml dans le forum SQL
    Réponses: 7
    Dernier message: 16/10/2009, 16h57
  5. Utiliser une liste de valeur dans un select
    Par in dans le forum Oracle
    Réponses: 13
    Dernier message: 09/01/2007, 12h33

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