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 -
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
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
-
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 ;-(
-
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... :-(- 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 bouclefor
, 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 bouclewhile
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
-