IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

[SHELL] Comment lire/parcourir un fichier ? [FAQ]


Sujet :

Contribuez

  1. #1
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 539
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 539
    Points : 19 361
    Points
    19 361
    Par défaut [SHELL] Comment lire/parcourir un fichier ?
    Si vous souhaitez réutiliser uniquement la première ligne d'un fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ read premiR_Ligne < fichier
    $ echo "$premiR_Ligne"
    le contenu de 'fichier' est redirigé vers la commande read, qui va placer ce qu'elle a lu dans une variable; ici, j'ai choisi le nom premiR_Ligne.

    Pour lire tout le contenu du fichier, on utilisera une boucle while :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while read Ligne
    do echo "$Ligne"
    done < fichier
    Il est possible de découper la ligne en autant de variables que nécessaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while read champ1 champ2 toutLeReste
    do line="$champ1 $champ2 $toutLeReste"
       echo "$line"
    done < fichier
    Les lignes d'un fichier peuvent commencer par des espaces, mais les codes précédents n'ont tiendront pas compte.
    Il y a deux façons de préserver ces espaces :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while read; do echo "$REPLY"; done
    REPLY est le nom de variable par défaut quand aucun nom de variable n'est indiqué à read.
    ou, vous pouvez modifier l'environnement de la commande read en adaptant l'IFS (Internal Field Separator) en lui assignant une valeur nulle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while IFS='' read line; do echo "$line"; done
    Si vous avez besoin de découper la ligne en fonction du formatage d'un fichier (CSV, par exemple),
    l'IFS peut être adapté pour correspondre au séparateur de champs du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while IFS=';' read champ1 champ2 toutLeReste
    do line="$champ1 $champ2 $toutLeReste"
       echo "$line"
    done < fichier.csv
    vous pourriez utiliser un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while IFS=';' read -a Array
    do echo "${Arrray[@]}"
    done < fichier.csv
    ou les paramètres positionnels :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    commandeQuiSortDuCSV | while read Ligne
    do IFS=';'
       set -- $Ligne
       echo "$@"
    done
    l'IFS, et les paramètres positionnels du script sont conservés intacts, car le pipe crée un sous-shell en dehors duquel les variables créées (ou modifiées) n'existent pas.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  2. #2
    Membre éclairé
    Avatar de hornetbzz
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2009
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Octobre 2009
    Messages : 482
    Points : 773
    Points
    773
    Par défaut
    une petite tipo: Arrray => Array

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 2
    Points : 5
    Points
    5
    Par défaut
    Awesome !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while IFS=';' read champ1 champ2 toutLeReste
    do line="$champ1 $champ2 $toutLeReste"
       echo "$line"
    done < fichier.csv
    C'est exactement ce dont j'avais besoin pour parser mon fstab

  4. #4
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Bonjour.

    Une nouvelle Q/R de la FAQ a été rédigée à partir de cette proposition : Comment lire/parcourir un fichier ?



    Idriss

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment lire dans un fichier xml en j2me
    Par sebac dans le forum Java ME
    Réponses: 2
    Dernier message: 01/01/2009, 20h56
  2. Lire / parcourir un fichier plat en VBA
    Par KuBi4K dans le forum VBA Access
    Réponses: 1
    Dernier message: 13/06/2007, 15h41
  3. Comment lire un grand fichier
    Par hello05 dans le forum MATLAB
    Réponses: 11
    Dernier message: 27/04/2007, 11h23
  4. Comment lire dans un fichier XML?
    Par yosthegost dans le forum Delphi
    Réponses: 5
    Dernier message: 29/05/2006, 18h50
  5. [C#] Comment lire/ecrire dans fichier ini ?
    Par meli0207 dans le forum C#
    Réponses: 2
    Dernier message: 20/03/2006, 17h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo