On Thu, 16 Oct 2003 07:17:00 +0000, Julien VIVENOT <ltg1022@???>
wrote:
> Bonjour, je suis en train de faire un petit script bash, et j'ai besoin
> soit de lire ligne par ligne un fichier soit de mettre tout le fichier
> directement dans une variable.
> Cependant, 'read ma_var < mon_fichier' ne me mets que la première ligne
> et je n'arrive pas à aller plus loin dans la lecture. Comment dois je
> faire ?
>
> Merci d'avance
> Julien Vivenot
>
> _________________________________________________________________
> Trouvez l'âme soeur sur MSN Rencontres ! http://g.msn.fr/FR1000/9551
>
>
Il existe plusieurs solutions, mais la plus simple consiste :
1 - A placer la commande read dans une boucle
ça, tu t'en doutait probablement. C'est la lecture qui va conditioner
la boucle.
2 - Effectuer la redirection du fichier sur la boucle et non pas sur la
lecture
Sinon le fichier est ouvert et refermer à chaque ordre de lecture et
on boucle indéfiniment sur la 1ere
ligne
Pour la redirection on a le choix entre :
version 1 :
while read ma_var
do
# Traitement
...
done < mon_fichier
version 2 :
cat mon_fichier |
while read ma_var
do
# Traitement de ma_var
...
done
C'est une affaire de goût.
Attention :
Avec cette méthode, il ne faut pas placer d'autres lectures de variables
dans la boucle, car il y a des interférences entre les lectures.
Si c'est imperatif, il faut commencer par charger les lignes dans un
tableau, ensuite on peut les exploiter à partir du tableau :
i=0
# Boucle de lecture et chargement en table
while read ma_var
do
tableau[i]=$ma_var
i=$(( i + 1 ))
done < mon_fichier
# Suite du traitement
...
... $tableau[0] # Première ligne
... $tableau[1] # Deuxième ligne
... $tableau[n] # Nième ligne, n peut etre une variable, un index
incrémenté dan une boucle par exemple
--
Using M2, Opera's revolutionary e-mail client: http://www.opera.com/m2/