Lire dans un fichier puis associer une variable à chaque ligne

Lire dans un fichier puis associer une variable à chaque ligne - Shell/Batch - Programmation

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 cité 1 fois
Message édité par toutsec le 18-10-2011 à 14:33:47
Reply

Marsh Posté le 18-10-2011 à 14:29:51   

Reply

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?

Reply

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 :

sed -i "s/double\ a=/double\ a=`\echo $a`;\#/" tessst.txt



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 :
  1. sed -i "s/double a=/double a=$a;#/" tessst.txt


Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed