Problème pour trier les informations d'un fichier

Résolu
Ka-El Messages postés 279 Statut Membre -  
Ka-El Messages postés 279 Statut Membre -
Bonjour,
j'ai la variable $toto qui peut parfois être un nom commun (par exemple "Robert" ou "Martha").
Mais dans d'autre cas cette variable peut me donner l'information "nom inconnu".
Je souhaite faire une boucle for qui va différencier les nom commun des "nom inconnu".
A noter que Je construit la variable à partir d'un fichier.
Voilà ce que cela donne pour l'instant:
for i in `cat fichier`
do
toto=`(je ne met pas le détail de la commande, mais le résultat peut être donc soit "robert" ou "nom inconnu")`
if [ ${toto} == ${toto} ]; then
echo $toto >> fichier_tri.txt
else
echo "anonyme" >> fichier_tri.txt
fi
done

Pour l'instant, le fichier_tri me liste bien les noms commun mais l'information "anonyme" n'apparait pas.
Vous savez pourquoi ?
Merci

1 réponse

  1. UnGnU Messages postés 1468 Statut Contributeur 158
     
    Salut,

    for i in `cat fichier`
    Ben déjà là, ce n'est pas bon ;-(
    Mieux vaut privilégier la syntaxe :
    while read i; do blablabla; done < fichier


    Ensuite :
    toto=`commandes de tri`
    if [ ${toto} == ${toto} ]; then

    Forcément que la condition est vraie à chaque fois ;-(
    0
    1. Ka-El Messages postés 279 Statut Membre
       
      Merci Ungnu,
      Mais j'y tiens à mon for, car en réalité il est un peu plus complexe ;-)

      Par ailleurs, dans ton exemple, je ne vois pas à quel moment, tu vas pouvoir indiquer l'information "anonyme" dans le fichier final ?

      En fait, j'ai quitter le shell script depuis quelques années et j'ai bien du mal à m'y remettre... :-(
      0
      1. UnGnU Messages postés 1468 Statut Contributeur 158 > Ka-El Messages postés 279 Statut Membre
         
        Par ailleurs, dans ton exemple, je ne vois pas à quel moment, tu vas pouvoir indiquer l'information "anonyme" dans le fichier final ?
        En fait je ne faisais que pointer du doigt l'incohérence de ton égalité (les 2 variables sont forcément identiques).
        0
      2. Ka-El Messages postés 279 Statut Membre > UnGnU Messages postés 1468 Statut Contributeur
         
        Ben oui tu as raison ! (je suis nul...)
        Du coup, comment je peux faire pour différencier $toto quand j'ai l'information "nom inconnu" (avec un joli espace entre les mots) et quand $toto me donne un nom commun de type Robert ou Patoche ?
        0
      3. UnGnU Messages postés 1468 Statut Contributeur 158 > Ka-El Messages postés 279 Statut Membre
         
        De toute façon ça ne change rien, dans la mesure où que ce soit l'un ou l'autre tu envoies tout dans le même fichier ;-\

        Puis ta boucle
        for
        , comme je te l'ai dit, n'est pas adéquate pour le traitement que tu veux faire, puisque elle ne sait pas gérer les espaces.

        Pour faire bref, quand elle rencontre "nom inconnu", elle traite d'abord "nom" puis ensuite "inconnu", ce qui n'arriverait pas avec une boucle
        while


        Un exemple :

        $ cat fich
        toto
        nom inconnu
        tata
        autre nom inconnu

        $ for i in $(cat fich); do echo "${i}";done
        toto
        nom
        inconnu
        tata
        autre
        nom
        inconnu

        $ while read i; do echo "${i}";done < fich
        toto
        nom inconnu
        tata
        autre nom inconnu
        0
      4. Ka-El Messages postés 279 Statut Membre > UnGnU Messages postés 1468 Statut Contributeur
         
        Oui finalement c'est pas mal du tout.
        Je prends !
        merci beaucoup pour ton aide.
        0