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

Shell et commandes GNU Discussion :

Récupérer les enregistrements à partir d'une liste


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Août 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 32
    Points : 50
    Points
    50
    Par défaut Récupérer les enregistrements à partir d'une liste
    Bonjour à tous,

    Je souhaite réaliser une opération simple de recherche dans un fichier à partir d'une liste.

    J'ai des lignes dans un fichier avec plusieurs champs:

    Format du fichier DATA (Les lettre a,b,c pour le numéro de ligne, et les nombres 1,2,3 pour le numéro du champ.

    DATA
    Ligne 1 Champ a1 Champ a2 Champ a3...
    Ligne 2 Champ b1 Champ b2 Champ b3...
    Ligne 3 Champ c1 Champ c2 Champ c3...
    Ligne 4 Champ d1 Champ d2 Champ d3...
    Ligne 5 Champ e1 Champ e2 Champ e3...



    Dans un deuxième fichier j'ai une liste de champs.

    LISTE
    Ligne1 Champ a2
    Ligne2 Champ c2...
    Ligne3 Champ e2...


    Je cherche à faire ressortir toutes les lignes qui ressortent de DATA lorsque le Champ [a-z]2 du fichier LISTE match avec le Champ [a-z]2 du fichier DATA

    Dans ce cas précis je cherche à récupérer du fichier DATA

    Fichier résultat

    Ligne 1 Champ a1 Champ a2 Champ a3...
    Ligne 3 Champ c1 Champ c2 Champ c3...
    Ligne 5 Champ e1 Champ e2 Champ e3...


    J'ai trouvé une solution avec sed en générant une série de commande sed à partir de mon fichier LISTE via excel.


    sed -n '/12345/p' DATA;sed -n '/6789A/p' DATA;sed -n '/BCDEF/p' DATA

    En procédant de cette manière, cela fonctionne très bien or c'est très long car le fichier DATA fait plus d'1go de données texte :/

    En effet je redemande à chaque commande de reparcourir le fichier DATA, alors que si je pouvais travailler avec sed sur une seule ouverture du fichier je gagnerai en temps d'exécution, à moins que je ne me trompe et que sed n'est pas du tout adapté pour ce cas.

    Si quelqu'un a déjà été confronté à ce cas, je suis preneuse.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    regarde du côté de la commande join
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 80
    Points : 88
    Points
    88
    Par défaut
    L'idée est de lire une seule et unique fois ton fichier DATA et de le ventiler en fichiers élémentaires.

    La commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gawk '{print $0 >> $2}' DATA
    va générer les fichiers suivants :
    a2
    b2
    c2
    d2
    ....

    Le fichier a2 contiendra tous les enregistrements dont la seconde colonne est a2 et ainsi de suite....

    Ensuite, il suffit de lire ton fichier LISTE.

    Si tu trouves a2 dans ton fichier LISTE, il suffira d'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat a2 >> fichier_resultat
    Si tu trouves b2 dans ton fichier LISTE, il suffira d'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat b2 >> fichier_resultat
    Les fichiers qui ne sont pas dans LISTE seront à supprimer à la fin.
    Je ne sais pas si c'est la solution la plus intelligente

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 80
    Points : 88
    Points
    88
    Par défaut
    Contenu du fichier DATA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    cat DATA
    a1 a2 a3 a4 a5 a6
    b1 b2 b3 b4 b5 b6
    c1 c2 c3 c4 c5 c6
    d1 d2 d3 d4 d5 d6
    e1 e2 e3 e4 e5 e6
    Contenu du fichier LIST
    Commande gawk
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gawk '{print $0 > $2}' DATA
    Génération des fichiers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    a2
    b2
    c2
    d2
    e2
    Contenu d'un fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cat a2
    a1 a2 a3 a4 a5 a6
    Traitement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for nom_fic in `cat LIST`
    do
       if [[ -f ${nom_fic} ]]
           then
                 cat ${nom_fic} >> fic_resultat
           else
                echo "fichier inexistant"
       fi
    done
    Le résultat donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     cat fic_resultat
     
    a1 a2 a3 a4 a5 a6
    c1 c2 c3 c4 c5 c6
    e1 e2 e3 e4 e5 e6

  5. #5
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    @emmachane : Pourquoi se compliquer la vie ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    $ cat DATA 
    a1 a2 a3 a4 a5 a6
    b1 b2 b3 b4 b5 b6
    c1 c2 c3 c4 c5 c6
    d1 d2 d3 d4 d5 d6
    e1 e2 e3 e4 e5 e6
    
    $ cat list 
    a2
    c2
    e2
    
    $ fgrep -f list DATA 
    a1 a2 a3 a4 a5 a6
    c1 c2 c3 c4 c5 c6
    e1 e2 e3 e4 e5 e6
    
    $
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 80
    Points : 88
    Points
    88
    Par défaut
    C'est la raison pour laquelle, j'ai annoncé d'entrée que ce n'est peut-être pas la façon la plus intelligente de faire . Tu viens d'en faire la démonstration

  7. #7
    Membre du Club
    Femme Profil pro
    Inscrit en
    Août 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 32
    Points : 50
    Points
    50
    Par défaut
    Merci beaucoup emmachane et Zipe31 !

    Pour une raison que j'ignore encore cela ne marche pas chez moi

    J'ai strictement recopié le code ci-dessus et utilisé les mêmes noms de fichiers.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     # cat DATA
    a1 a2 a3 a4 a5 a6
    b1 b2 b3 b4 b5 b6
    c1 c2 c3 c4 c5 c6
    d1 d2 d3 d4 d5 d6
    e1 e2 e3 e4 e5 e6
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    # cat list
    a2
    c2
    e2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    # fgrep -f list DATA
    #
    si j'inverse les fichiers

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    # fgrep -f DATA list
    a2
    c2
    e2
    Je tourne sur du BASH, c'est peut-être ça le problème, la commande fgrep n'est pas reconnue...???

    En plus fgrep est la fonction adapté pour ce type de problème alors je ne comprend pas, d'un seul coup je suis perdue....

  8. #8
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    Citation Envoyé par erustika Voir le message
    Merci beaucoup emmachane et Zipe31 !

    Je tourne sur du BASH, c'est peut-être ça le problème, la commande fgrep n'est pas reconnue...???
    si tu ne l'as pas tu peux tjrs l'installer, soit depuis un package si il est disponible soit depuis ses sources.

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par erustika Voir le message
    Merci beaucoup emmachane et Zipe31 !

    Pour une raison que j'ignore encore cela ne marche pas chez moi

    J'ai strictement recopié le code ci-dessus et utilisé les mêmes noms de fichiers.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     # cat DATA
    a1 a2 a3 a4 a5 a6
    b1 b2 b3 b4 b5 b6
    c1 c2 c3 c4 c5 c6
    d1 d2 d3 d4 d5 d6
    e1 e2 e3 e4 e5 e6
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    # cat list
    a2
    c2
    e2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    # fgrep -f list DATA
    #
    si j'inverse les fichiers

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    # fgrep -f DATA list
    a2
    c2
    e2
    Je tourne sur du BASH, c'est peut-être ça le problème, la commande fgrep n'est pas reconnue...???
    Salut
    Déjà l'interpréteur utilisé n'a pas d'effet sur le fait qu'une commande soit connue ou pas. Et si fgrep n'était pas reconnue, il te mettrait un truc style "fgrep not found".

    Citation Envoyé par erustika Voir le message
    En plus fgrep est la fonction adapté pour ce type de problème alors je ne comprend pas, d'un seul coup je suis perdue....
    L'avantage d'Unix/Linux; c'est qu'il y a tellement d'outils que l'on peut toujours trouver autre chose pour produire le même résultat...
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    cat list |while read val; do grep "$val" DATA; done
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Membre habitué Avatar de Levi59
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 58
    Points : 148
    Points
    148
    Par défaut
    Citation Envoyé par Sve@r
    L'avantage d'Unix/Linux; c'est qu'il y a tellement d'outils que l'on peut toujours trouver autre chose pour produire le même résultat...
    Code bash :
    Sélectionner tout - Visualiser dans une fenêtre à part
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat list |while read val; do grep "$val" DATA; done
    Useless use of cat...

    cette écriture est meilleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while read val; do grep "$val" DATA; done < list
    Carpe Diem

  11. #11
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Levi59 Voir le message
    cette écriture est meilleur :
    Avis purement subjectif. Les deux écritures ont des avantages comme des inconvénients. Celle que j'ai utilisée permet d'appliquer un traitement sur n'importe quel flux entrant issu d'une commande (ping, traceroute, etc). Mais aura l'inconvénient de ne pas pouvoir mémoriser de variable (perdue en fin de pipe). La tienne permet de créer et conserver des variables mais ne peut traiter qu'un fichier...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  12. #12
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    La tienne permet de créer et conserver des variables mais ne peut traiter qu'un fichier...
    Non non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while read val; do grep "$val" DATA; done < <(list toto fich)
    $ man woman
    Il n'y a pas de page de manuel pour woman.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    Bonjour,

    <(liste) est une substitution de processus, où liste est une liste de commandes, pas une liste de fichiers.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  14. #14
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Citation Envoyé par N_BaH Voir le message
    Bonjour,

    <(liste) est une substitution de processus, où liste est une liste de commandes, pas une liste de fichiers.
    Oups honte à moi J'ai oublié le "cat"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while read val; do grep "$val" DATA; done < <(cat list toto fich)
    Merci N_BaH
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  15. #15
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par zipe31 Voir le message
    Oups honte à moi J'ai oublié le "cat"
    As-tu remarqué que mon post de ce matin était en réponse à la remarque de Levi59 "useless use of cat" ?
    Donc on passe de cat fic | while read à while read ... << (cat fic)Wééé
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  16. #16
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    As-tu remarqué que mon post de ce matin était en réponse à la remarque de Levi59 "useless use of cat" ?
    Donc on passe de cat fic | while read à while read ... << (cat fic)Wééé
    Oui oui j'avais remarqué

    Attention toutefois, la syntaxe est "< <(cat ...)" et non pas "<<(cat...)"

    Mais hormis mon oubli du "cat", c'était surtout pour souligner également le fait qu'on évite un sous-shell et donc que les variables créées restent exploitables
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  17. #17
    Membre du Club
    Femme Profil pro
    Inscrit en
    Août 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 32
    Points : 50
    Points
    50
    Par défaut
    Merci à tous pour votre aide, cela fonctionne très bien!


    • Pour revenir à la première solution


    Citation Envoyé par al1_24 Voir le message
    regarde du côté de la commande join
    J'ai réussi à réaliser ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    # join -11 -22 list DATA 
    a2 a1 a3 a4 a5 a6
    c2 c1 c3 c4 c5 c6
    e2 e1 e3 e4 e5 e6
    Il ne me reste plus qu'à inverser les deux premières colonnes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    # awk -F' ' 'BEGIN {OFS=" "} { print $2,$1,$3,$4}'  < res 
    a1 a2 a3 a4 a5 a6
    c1 c2 c3 c4 c5 c6
    e1 e2 e3 e4 e5 e6
    • La seconde solution


    En faite elle marche très bien, même pour la valeur a2 (du fichier list) par exemple contenu dans une chaine de caractères 2a2xxx78 (du fichier DATA) par exemple.

    La remarque de Sve@r est donc justifié

    Citation Envoyé par Sve@r Voir le message
    Salut
    Déjà l'interpréteur utilisé n'a pas d'effet sur le fait qu'une commande soit connue ou pas. Et si fgrep n'était pas reconnue, il te mettrait un truc style "fgrep not found".
    J'ai tout bêtement constitué mon fichier sous windows et donc oublié de faire la conversion dos2unix

    Merci donc à tous, pour une grande débutante sous linux, j'ai apprise beaucoup de choses merci

  18. #18
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par erustika Voir le message
    • La seconde solution


    En faite elle marche très bien, même pour la valeur a2 (du fichier list) par exemple contenu dans une chaine de caractères 2a2xxx78 (du fichier DATA) par exemple.

    La remarque de Sve@r est donc justifié



    J'ai tout bêtement constitué mon fichier sous windows et donc oublié de faire la conversion dos2unix
    Bien vu. Effectivement le fait que fgrep ne marche pas aurait dû nous mettre la puce à l'oreille qu'il y avait un pb sur le fichier "list"...

    Citation Envoyé par erustika Voir le message
    Merci donc à tous, pour une grande débutante sous linux, j'ai apprise beaucoup de choses merci
    Débutante mais déjà au fait de manipulation de fichiers, des outils comme grep, dos2unix, etc donc déjà bien à l'aise...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  19. #19
    Membre habitué Avatar de Levi59
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 58
    Points : 148
    Points
    148
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    La tienne permet de créer et conserver des variables mais ne peut traiter qu'un fichier...
    Excusez mon temps de réponse mais il est possible à moindre frais de se passer de cat inutiles tout en ne limitant pas le nombre de fichiers de la redirection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for FILE in "Fichier1" "Fichier2" "Fichier3"
    do 
        while read
        do 
            echo $REPLY
        done < $FILE
    done
    Carpe Diem

  20. #20
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Levi59 Voir le message
    Excusez mon temps de réponse mais il est possible à moindre frais de se passer de cat inutiles tout en ne limitant pas le nombre de fichiers de la redirection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for FILE in "Fichier1" "Fichier2" "Fichier3"
    do 
        while read
        do 
            echo $REPLY
        done < $FILE
    done
    Quand je disais "ne peut traiter qu'un fichier", je voulais faire comprendre "ne peut traiter que du fichier" et non "un seul fichier" !!!

    Accessoirement, rajouter une structure de boucle shell (qui, rappelons-le, reste "interprété") juste pour éviter d'utiliser cat (qui, rappelons-le, est un programme "compilé") est, à mon avis, peu judicieux !!!
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while read
    do
        echo $REPLY
    done < <(cat "Fichier1" "Fichier2" "Fichier3")

    Ce n'est pas parce que, parfois, le cat est utilisé inutilement qu'il faut commencer à le faire passer pour un truc d'hérétique à éviter à tout prix !!!

    En plus, je suis sûr que le "Useless use of cat" a été créé pour limiter des trucs du style cat fic |grep machin...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. [MySQL] Extraire les données à partir d'une liste déroulante dans une autre liste deroulante
    Par Amel_B dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 26/11/2008, 13h20
  2. Réponses: 1
    Dernier message: 21/11/2008, 11h38
  3. Enregistrement à partir d'une liste modifiable
    Par guymar dans le forum Access
    Réponses: 2
    Dernier message: 23/12/2006, 17h45
  4. Réponses: 4
    Dernier message: 01/10/2006, 15h37
  5. [VB6] Récupérer les images à partir d'une ImageList
    Par mbzhackers dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 30/05/2006, 15h46

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