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 POSIX Discussion :

Enumérer des champs avec un vieux bash


Sujet :

Shell et commandes POSIX

  1. #1
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut Enumérer des champs avec un vieux bash
    Bonjour,

    j'ai une chaine de caractères où le séparateur est ';' et pouvant contenir des espaces significatives, par exemple "a;b c;d;e".

    Je voudrais faire une boucle dans laquelle une variable prendrait successivement les valeurs "a" "b c" "d" "e".

    Je sais le faire en awk:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ echo "a;b c;d;e" | awk -F';' '{for (nf = 1; nf < NF; nf++) { x=$nf; print "-" x "-" }}'
    -a-
    -b c-
    -d-
    Je voudrais savoir s'il est possible de le faire avec un très vieux bash 3.2.57 de 2007, par exemple, en transférant la chaîne dans un tableau indexé, mais en utilisant un séparateur ';' et non espace.

    J'ai essayé toutes sortes de choses avec declare -a tab. À un moment je pensais avoir trouvé avec ceci qui imprime bien le tableau... mais qui n'a qu'un seul élément:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ tab=($(printf "a;b c;d;e" | tr ';' '\n'))
     
    $ printf '%s\n' "${tab[@]}"
    a
    b c
    d
    e
     
    $ echo "${#tab[@]}"
    1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ echo "a;b c;d;e" | read -d ';' -a tab
     
    $ echo "${#tab[@]}"
    0
    Si quelqu'un a une idée, je suis preneur.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Bon, après de nombreux essais, j'ai enfin réussi !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ IFS=';' read -a tab < <(echo "a;b c;d;e")
    # ou bien:
    $ l="a;b c;d;e"
    $ IFS=';' read -a tab <<<"l"
    # Vérification
    $ echo "${#tab[@]}"
    4
    $ printf '%s\n' "${tab[@]}"
    a
    b c
    d
    e
    Lorsque j'utilise l'option -d\; à la place du changement provisoire d'IFS, il semblerait que l'option -a soit ignorée car tab ne contient que "a".

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 580
    Points : 19 448
    Points
    19 448
    Par défaut
    Citation Envoyé par help read
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    -d délim  continue jusqu'à ce que le premier caractère de DELIM soit lu,                                       
                    au lieu du retour à la ligne

Discussions similaires

  1. Mise jour des champs avec formulaires
    Par tetsuoo dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 09/09/2007, 20h35
  2. Recharger des champs avec des cookies
    Par mitch46000 dans le forum Langage
    Réponses: 3
    Dernier message: 11/08/2007, 08h33
  3. [PHP-JS] bouton reset ne supprimant pas des champs avec value
    Par SegmentationFault dans le forum Langage
    Réponses: 4
    Dernier message: 29/11/2006, 14h52
  4. [Oracle] Enumération des champs d'une table
    Par gogolak dans le forum Langage SQL
    Réponses: 3
    Dernier message: 31/03/2006, 16h58
  5. Réponses: 3
    Dernier message: 23/10/2005, 22h06

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