Lire dans un fichier puis associer une variable à chaque ligne - Shell/Batch - Programmation
Marsh Posté le 18-10-2011 à 14:50:36
J'ai mis mon fichier input sous forme d'une ligne et ça marche. (en enlevant la nouvelle définition de IFS). C'est quoi ce problème?
Marsh Posté le 19-10-2011 à 22:06:34
toutsec a écrit : J'ai mis mon fichier input sous forme d'une ligne et ça marche. (en enlevant la nouvelle définition de IFS). C'est quoi ce problème? |
Salut
C'est pourtant évident: tu as écrit IFS=$'\n'. Est-ce que '\n' est une variable pour que tu le fasses précéder d'un dollar ???
Accessoirement, c'est pas super tiptop de jouer avec l'IFS (bon heureusement que tu l'as sauvegardé) surtout que tu utilises while read line do...done <fichier et que la commande read n'utilise pas l'IFS !!!
toutsec a écrit :
|
Tu veux m'expliquer pourquoi
1) tu protèges l'espace et le # par un backslash ? Est-ce que l'espace ou le # sont un métacaractère ???
2) tu mets un echo entre backquottes ? les backquottes vont remplacer echo $a par ce qu'affiche la commande (donc $a). Autant mettre $a direct !!!
Code :
|
Marsh Posté le 18-10-2011 à 14:29:51
bonjour!
Je souhaite faire un truc a priori simple en bash.
J'ai un fichier input avec 4 lignes avec dans chaque ligne un double.
Je veux lire ce fichier input pour ensuite pouvoir copier chaque double dans un autre fichier (pour remplacer d'autres doubles).
Pour le moment j'ai mon script qui est séparé en deux : la première partie qui est sensée lire le fichier input puis la seconde qui doit copier dans le nouveau fichier.
Première partie :
#! /bin/bash
a=0;
b=0;
d=0;
X0=0;
Y0=0;
fichier="ParametersOptimized.txt"
oldIFS=$IFS
IFS=$'\n'
while read line
do
#echo $line
tab=(0 $line)
a=${tab[1]}
b=${tab[2]}
d=${tab[3]}
X0=${tab[4]}
Y0=${tab[5]}
done < $fichier
IFS=$old_IFS
Seconde partie. Cherche dans le fichier tessst.txt la chaîne double quelque chose puis remplace par la valeur lue un peu plus haut :
sed -i "s/double\ a=/double\ a=`\echo $a`;\#/" tessst.txt
sed -i "s/double\ b=/double\ b=`\echo $b`;\#/" tessst.txt
sed -i "s/double\ d=/double\ d=`\echo $d`;\#/" tessst.txt
sed -i "s/double\ X0=/double\ X0=`\echo $X0`;\#/" tessst.txt
sed -i "s/double\ Y0=/double\ Y0=`\echo $Y0`;\#/" tessst.txt
C'est la première partie qui ne marche pas et je ne comprends pas pourquoi.
J'ai aussi tenté d'autres méthodes que j'ai vu en cherchant comme :
while read arg1 arg2 arg3 arg4 arg5; do
echo $arg5 $arg4 $arg3 $arg2 $arg1
done < <( cat ParametersOptimized.txt )
mais ici toutes les lignes sont dans $arg1 ...
Bref, j'ai écumé internet mais rien ne marche
Merci!
Message édité par toutsec le 18-10-2011 à 14:33:47