Les variables s'ecrases avec echo

Fermé
jeefran - 15 janv. 2010 à 18:04
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 20 janv. 2010 à 14:54
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
15 janv. 2010 à 18:54
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 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
20 janv. 2010 à 14:30
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897 > dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024
20 janv. 2010 à 14:54
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 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
16 janv. 2010 à 10:21
hello
les champs 3 et 1 sont-ils strictement numériques ? sinon il faut
if [ "$var" = "$var2" ]
plutot que
if [ $var -eq $var2 ]
0
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
16 janv. 2010 à 15:32
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
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
19 janv. 2010 à 15:08
Ce petit détail comme tu dis c'est la principale source de merdoiement des scripts ;-((

Merci pour le retour ;-)
0