Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1609 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Lire dans un fichier puis associer une variable à chaque ligne

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Lire dans un fichier puis associer une variable à chaque ligne

n°2106946
toutsec
Posté le 18-10-2011 à 14:29:51  profilanswer
 

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
mood
Publicité
Posté le 18-10-2011 à 14:29:51  profilanswer
 

n°2106949
toutsec
Posté le 18-10-2011 à 14:50:36  profilanswer
 

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?

n°2107217
Sve@r
Posté le 19-10-2011 à 22:06:34  profilanswer
 

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



Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Lire dans un fichier puis associer une variable à chaque ligne

 

Sujets relatifs
(fichier mui)Comment éditer les messages du jeu dame de pique Windows?[bash] [Windows] traitement a partir de nom de fichier
[resolu] batch ne dépasse pas la première ligne[PHP] Ouvrir un fichier sur un serveur distant
[VBS] associer le stout d'une commande à une variable[VBS] ouverture boite de dialogue selection fichier win7
[Batch] Lancer une ligne de commande avec des paramètresComment contrôler le nom du fichier uploadé
transformation du fichier XML vers TEX avec XSLT[Resolu] Regex : Variable et incrementation dans le replace
Plus de sujets relatifs à : Lire dans un fichier puis associer une variable à chaque ligne


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR