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

5 réponses

jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896 > dubcek Messages postés 18789 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
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
les champs 3 et 1 sont-ils strictement numériques ? sinon il faut
if [ "$var" = "$var2" ]
plutot que
if [ $var -eq $var2 ]
0
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
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

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

Merci pour le retour ;-)
0