Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Modérateur
    Avatar de N_BaH
    Inscrit en
    février 2008
    Messages
    3 508
    Détails du profil
    Informations forums :
    Inscription : février 2008
    Messages : 3 508
    Points : 9 119
    Points
    9 119

    Par défaut [SHELL] Comment lire/parcourir un fichier ?

    Si vous ne vouliez lire que la première ligne d'un fichier :
    Code :
    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 "$premiR_Ligne"

    Pour lire tout le contenu du fichier, on utilisera une boucle `while' :
    Code :
    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 :
    1
    2
    3
    4
    while read champ1 champ2 toutLeReste
    do line="$champ1 $champ2 $toutLeReste"
       echo "$line"
    done < fichier
    Si vous avez besoin de découper la ligne en fonction du formatage d'un fichier (CSV, par exemple),
    vous modifierez l'environnement de la commande `read' en adaptant l'IFS (Internal Field Separator):
    Code :
    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 :
    1
    2
    3
    while IFS=';' read -a Array
    do echo "${Arrray[@]}"
    done < fichier.csv
    ou les paramètres positionnels :
    Code :
    1
    2
    3
    4
    5
    cat fichier.csv | 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.

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

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : octobre 2009
    Messages : 482
    Points : 741
    Points
    741

    Par défaut

    une petite tipo: Arrray => Array

  3. #3
    Invité régulier
    Inscrit en
    mars 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : mars 2009
    Messages : 2
    Points : 5
    Points
    5

    Par défaut

    Awesome !!!
    Code :
    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
    Responsable Modération

    Avatar de ok.Idriss
    Homme Profil pro Idriss Neumann
    Consultant en SSII et ingénieur CNAM Paris (spécialité SI)
    Inscrit en
    février 2009
    Messages
    5 040
    Détails du profil
    Informations personnelles :
    Nom : Homme Idriss Neumann
    Âge : 24
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant en SSII et ingénieur CNAM Paris (spécialité SI)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2009
    Messages : 5 040
    Points : 17 545
    Points
    17 545

    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
    mes cours sur DVP | initiation aux bases de données relationnelles | FAQ Linux | FAQ tests
    la programmation Shell | bonnes pratiques Bash | exercices shells scripts & Bash corrigés
    Merci aussi de lire les règles du club

    "Forgiveness does not change the past, but it does enlarge the future." (Paul Boese)
    Traduction approximative : le pardon ne change pas le passé mais élargit l'horizon de l'avenir.

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •