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 :

Sélection paragraphe via awk


Sujet :

Shell et commandes GNU

  1. #1
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 17
    Points : 4
    Points
    4
    Par défaut Sélection paragraphe via awk
    Bonjour,

    Je cale sur une commande awk à passer pour sélectionner x paragraphes contenus entre 2 mots (toujours le même), exemple :

    MOT
    paragraphe1....
    MOT
    paragraphe2....
    MOT
    paragraphe3...
    MOT

    Comment faire pour récupérer les paragraphes 1,2 et 3 via awk (ou autres)

    d'avance merci

  2. #2
    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,

    Solutions basées sur l'exemple donné.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ awk '$0 !~ /MOT/ { print }' plop 
    paragraphe1....
    paragraphe2....
    paragraphe3...
     
    $ sed '/MOT/d' plop 
    paragraphe1....
    paragraphe2....
    paragraphe3...

  3. #3
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 17
    Points : 4
    Points
    4
    Par défaut
    merci pour la réponse rapide
    mais je n'ai pas été assez claire non plus

    En fait, je veux pouvoir traiter individuellement chaque paragraphe (récupération de certains champs)

  4. #4
    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 jolicare Voir le message
    mais je n'ai pas été assez claire non plus
    En fait, je veux pouvoir traiter individuellement chaque paragraphe (récupération de certains champs)
    D'où mon "Solutions basées sur l'exemple donné. " dans ma réponse

    Si tu veux une réponse précise à ton problème, il nous faut une question précise et si possible accompagnée d'un exemple concret :
    FICHIER AVANT => FICHIER APRÈS


  5. #5
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 17
    Points : 4
    Points
    4
    Par défaut
    oui c'est vrai je n'ai pas été claire, j'espère l'être un peu plus

    En pièce jointe vous trouverez un exemple de ce que je veux traiter

    Pour chaque classe (MOT CLASS), je veux pouvoir récupérer certaines informations/lignes (INFO, CLIENT ET INCLUDE en l'occurrence)
    Le format est un peu le suivant :

    CLASS xxx
    blabla
    INFO
    blabla
    CLIENT
    blabla
    INFO
    blabla
    CLASS xxx
    blabla
    INFO
    blabla...etc...

  6. #6
    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
    Les solutions sont nombreuses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    egrep '^(INFO|CLIENT|INCLUDE)' exemple.txt
     
    sed -n '/^\(INFO\|CLIENT\|INCLUDE\)/p' exemple.txt
     
    awk '/^(INFO|CLIENT|INCLUDE)/ { print }' exemple.txt

  7. #7
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 17
    Points : 4
    Points
    4
    Par défaut
    Ok mais je veux pouvoir associer ces infos à chaque classe

    Dans le fichier exemple, quelles sont les valeurs (INFO, CLIENT et INCLUDE) pour la classe PL-MASTER-UNX-ALLDRV puis la classe PL-MASTER-UNX-K7 etc...

  8. #8
    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
    Ben tu rajoutes CLASS dans le motif de recherche.

  9. #9
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 17
    Points : 4
    Points
    4
    Par défaut
    ok merci

    en fait, j'aurais voulu un truc du genre

    CLASS:INFO,CLIENT,INCLUDE
    CLASS:INFO,CLIENT,INCLUDE....

    sachant qu'il peut y avoir plusieurs valeurs CLIENT,INFO et INCLUDE

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

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

    j'utiliserais un tableau, dont l'indice serait incrémenté à la rencontre de /^CLASS/, auquel serait concaténée les valeurs voulues, et qui serait affiché dans le END...
    ?

  11. #11
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 310
    Points : 12 818
    Points
    12 818
    Par défaut
    Bonjour,
    Pour répondre à N_BaH, il n'est pas utile dans cas de monopoliser la mémoire pour rien, puisque c'est dans l'ordre, dans le même fichier, pas besoin de tout stocker puis de vider au END.
    Même le tableau ne semble pas très utile... mais bon, dans la pratique autant y passer, comme ça en cas d'évolution...

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 594
    Points : 19 473
    Points
    19 473
    Par défaut
    il n'est pas utile dans cas de monopoliser la mémoire pour rien, puisque c'est dans l'ordre, dans le même fichier, pas besoin de tout stocker puis de vider au END.
    concrètement, quelle alternative serait plus adaptée ?

  13. #13
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 310
    Points : 12 818
    Points
    12 818
    Par défaut
    Un exemple simple, sans tableau ici, mais ici le but est de montrer une utilisation en délestant par bloc et non à la toute fin du fichier.
    Comme ceci, si le fichier fait plusieurs Giga, on ne sera pas en risque (bien sur ici, il ne faudrait pas non plus qu'il n'y ait qu'un seul 'CLASS' dans le fichier suivi de millions de ligne CLIENT ou INFO...):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ awk '/^CLASS/,!/.*/ {
      if (/^CLASS/){ if (str) print str #si le cas est CLASS, on affiche str si celui-ci non vide
        str = $0;x=":"} #on traite le cas CLASS,on initialise str avec le resultat et on initialise x avec ":"
      if (/^INFO/){ str = str x $0;x=","} #on traite le cas INFO, on concatene la variable x et le resultat dans str et on initialise x avec ","
      if(/^CLIENT/){ str = str x $0;x=","} #on traite le cas CLIENT, on concatene la variable x et le resultat dans str et on initialise x avec ","
      if(/^INCLUDE/){ str = str x $0;x=","} #on traite le cas INCLUDE, on concatene la variable x et le resultat dans str et on initialise x avec ","
    }
    END{print str}' fichier

  14. #14
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Octobre 2012
    Messages : 17
    Points : 4
    Points
    4
    Par défaut
    Merci bcp à tous et notamment disedorgue pour la bonne réponse^^, ça fonctionne parfaitement

Discussions similaires

  1. remplacement via awk (jawk)
    Par gomodo dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 06/10/2008, 09h00
  2. Comment affiner ma sélection via des DBLookUpComboBox
    Par CleeM dans le forum Bases de données
    Réponses: 6
    Dernier message: 19/06/2007, 11h52
  3. Réponses: 13
    Dernier message: 19/03/2007, 16h55
  4. Sélection dans un query via case à cocher dans un form
    Par Bernard123 dans le forum Access
    Réponses: 2
    Dernier message: 22/12/2005, 14h49
  5. Table de relation et sélection via jointure
    Par 73672 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 09/11/2004, 09h33

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