Les variables s'ecrases avec echo

Bonjour,
j'ai un soucis avec un script qui devrait faire du classement dans un fichier csv
il doit lire une liste dans un premier fichier, comparer ligne à ligne avec le second, et si une valeur match le premier et le deuxième, il sort par echo les deux variable à la suite :

or il ne le fait pas, et on ne lit que la seconde variable en sortie, pourquoi??

while read i
do
byp=0
var=$(echo $i | cut -d ";" -f 3)
while read t
do
var2=$(echo $t | cut -d ";" -f 1)
if [ $var -eq $var2 ] 2> /dev/null
then
k=$(echo $t | cut -d ";" -f 2-)
echo "$t $k" #>> output.csv # <-- sort les deux variables
byp=1
fi
done < $2
if [ $byp -eq 0 ]
then
echo $i #>> output.csv
fi
done < $1
Configuration: Linux
Firefox 3.5.3

5 réponses

  1. Modérateur
    Salut,

    C'est normal.
    Il te faut utiliser la commande "exec" et les descripteurs de fichiers.
    Par contre c'est assez complexe à mettre en place.

    Un exemple : https://guidespratiques.traduc.org/guides/vf/Bash-Beginners-Guide/Bash-Beginners-Guide.html#sect_08_02_04
    1. Contributeur
      hello
      je n'ai pas saisi le pourquoi de la suggestion: à cause des 2 boucles while imbriquées avec chacune une redirection de stdin ?
    2. Modérateur
      @dubcekSalut,

      Parce que il m'est arrivé (sur le forum) de croiser des boucles imbriquées avec des "read" (et non pas des "while") et que ça posait problème. Puis la solution du lien me plaisait bien dans la mesure où je n'ai pas l'habitude ni le réflexe, de part ma pauvre connaissance, d'utiliser les redirections avec des fd (file descriptor)...
  2. Contributeur
    hello
    les champs 3 et 1 sont-ils strictement numériques ? sinon il faut
    if [ "$var" = "$var2" ]
    plutot que
    if [ $var -eq $var2 ]
    1. oulala jipicy, merci, mais je me rends compte que je mets le doigt sur un big probleme. Le temps d'assimiler le guide bash du debutant et je debug mon code ;-). Bref, c'est pas pour tout de suite quoi.

      Cependant, encore une précision, si au lieu d'écrire :
      echo "$t $k"
      par exemple, je tape :
      echo $t
      echo $k
      alors là ça fonctionne.
      Weird, isn't it?
      1. Modérateur
        Débugue ton script en rajoutant "set -xv" après le shebang (#! /bin/bash), tu devrais voir comment sont interprétées tes variables..
        1. Merci pour vos réponses, en fait ça n'avait pas de rapport avec les descripteurs de fichiers, mais juste avec un fromdos ça eu mieux marché....

          http://www.debianaddict.org/article12.html

          En fait jamais omis de vous parler de ce petit détail...

          Encore merci quand meme.
          1. Modérateur
            Ce petit détail comme tu dis c'est la principale source de merdoiement des scripts ;-((

            Merci pour le retour ;-)