Re: lire ds un fichier (en bash)

Top Page

Reply to this message
Author: LIGIER Philippe
Date:  
To: Julien VIVENOT, guilde
Subject: Re: lire ds un fichier (en bash)
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/