Forum Programmation.shell Chargement d'une liste avec 2 variables pour une boucle for

Posté par  .
Étiquettes : aucune
1
8
oct.
2008
Bonjour,

Comment faire pour que dans une liste, le seul séparateur pris en compte soit le retour chariot, et non pas l'espace ?

Je m'explique : j'ai un fichier de configuration domaines.cfg :
1 societe.com
2 societe.fr
8 masociete.com


Je souhaite parcourir ce fichier ligne par ligne avec une boucle "for" par exemple.
Voici mon code :

#!/bin/sh
LISTE=`cat domaines.cfg`
for a in $LISTE;
do
echo "Enregistrement $a"
done;

Voilà le résultat que j'aimerais avoir :

Enregistrement 1 societe.com
Enregistrement 2 societe.fr
Enregistrement 8 masociete.com

A la place, voici ce que j'obtiens

Enregistrement 1
Enregistrement societe.com
Enregistrement 2
Enregistrement societe.fr
...

Quelqu'un à une idée ? Merci pour votre aide !
  • # df

    Posté par  . Évalué à 5.

    cat domaines.cfg | while read domaine
    do
    //...........
    echo enregistrement $domaine
    done
  • # read est ton ami

    Posté par  (site web personnel) . Évalué à 4.

    while read a b; do echo a=\"$a\" b=\"$b\"; done<domaine.cfg
    • [^] # Re: read est ton ami

      Posté par  . Évalué à 2.

      Quand on est débutant, on a toujours honte de voir la simplicité de la solution... Merci beaucoup, j'étais parti pour galérer longtemps !

      Merci aussi à fcartegnie dont la soluce était pas si mal !
      • [^] # Re: read est ton ami

        Posté par  . Évalué à 4.

        Tu as aussi la possibilité d'utiliser la variable IFS qui indique quels sont les séparateurs de champs (par défaut ' ', '\n' et '\t') pour n'avoir que l'espace.
        Ex:

        old_IFS=$IFS
        IFS=" "
        LISTE=`cat domaines.cfg`
        for a in $LISTE;
        do
        echo "Enregistrement $a"
        done;
        IFS=$old_IFS

        Cela peut etre pratique si tu as besoin d'utiliser un autre séparateur à un autre moment (plutot que d'appeler cut, sed et autres programmes)
  • # sed c'est dien

    Posté par  (site web personnel) . Évalué à 5.

    sed domaines.cfg -e "s/^/Enregistrement /"

    L'association LinuxFr ne saurait être tenue responsable des propos légalement repréhensibles ou faisant allusion à l'évêque de Rome, au chef de l'Église catholique romaine ou au chef temporel de l'État du Vatican et se trouvant dans ce commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.