Les variables s'ecrases avec echo

jeefran -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
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. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
    0
    1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      hello
      je n'ai pas saisi le pourquoi de la suggestion: à cause des 2 boucles while imbriquées avec chacune une redirection de stdin ?
      0
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Salut,

        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)...
        0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    les champs 3 et 1 sont-ils strictement numériques ? sinon il faut
    if [ "$var" = "$var2" ]
    plutot que
    if [ $var -eq $var2 ]
    0
  3. jeefran
     
    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?
    0
  4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Débugue ton script en rajoutant "set -xv" après le shebang (#! /bin/bash), tu devrais voir comment sont interprétées tes variables..
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jeefran
     
    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.
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Ce petit détail comme tu dis c'est la principale source de merdoiement des scripts ;-((

      Merci pour le retour ;-)
      0