Les variables s'ecrases avec echo
jeefran
-
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
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
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
A voir également:
- Les variables s'ecrases avec echo
- Echo discord - Forum Casque et écouteurs
- @Echo off - Forum Virus
- Problème echo fichier .bat ✓ - Forum Windows 7
- Echo lors d'un appel samsung - Forum Mobile
- Probleme echo en appel - Forum Samsung
5 réponses
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
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
hello
les champs 3 et 1 sont-ils strictement numériques ? sinon il faut
if [ "$var" = "$var2" ]
plutot que
if [ $var -eq $var2 ]
les champs 3 et 1 sont-ils strictement numériques ? sinon il faut
if [ "$var" = "$var2" ]
plutot que
if [ $var -eq $var2 ]
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?
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?
Débugue ton script en rajoutant "set -xv" après le shebang (#! /bin/bash), tu devrais voir comment sont interprétées tes variables..
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
je n'ai pas saisi le pourquoi de la suggestion: à cause des 2 boucles while imbriquées avec chacune une redirection de stdin ?
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)...