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

Linux Discussion :

Awk séléction premier pattern


Sujet :

Linux

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Awk séléction premier pattern
    Bonjour à tous,

    Je cherche a numéroté des lignes en fonction du premier pattern rencontré.
    Je m'explique, j'ai un fichier qui contient des lignes de ce type :

    .....<b>DRM</b>......<b>CRM</b>...
    ...<b>CRM</b>...
    ...<b>CRM</b>......
    ...<b>CRM</b>......<b>DRM</b>.......
    ...<b>DRM</b>.......
    Et j'aimerais avoir en sortie un truc dans ce gout là :

    1 .....<b>DRM</b>......<b>CRM</b>...
    1 ...<b>CRM</b>...
    2 ...<b>CRM</b>......
    3 ...<b>CRM</b>......<b>DRM</b>.......
    2 ...<b>DRM</b>.......
    On trouve en premier <b>CRM</b>, on numérote la ligne et on incrémente,
    On trouve en premier <b>DRM</b>, on numérote et on incrémente.

    Le problème c'est que je n'arrive pas a spécifier qu'il faut s'arrêter au premier pattern rencontré.

    Voilà mon code pour le moment:
    cat $fic1 |
    awk 'BEGIN{numC=0;numD=0}
    /<b>CRM<\/b>/ {numC++;print numC " " $0}
    /<b>DRM<\/b>/ {numD++;print numD " " $0}
    ' > $fic2
    Si quelqu'un à la solution,
    Merci d'avance.

  2. #2
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Points : 562
    Points
    562
    Par défaut
    Bonjour,

    Si tu veux arreter sur le premier pattern de la ligne courante, il faut utiliser la variable $1 (premier champs de la ligne courante) et tu teste la chaine DRM ou CRM

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Bonjour ttttnht et merci de ta réponse,

    Le problème ici, c'est que je ne sais pas à quelle position se situe le pattern,
    mais j'ai tout de même trouvé une solution en me basant sur ta réponse.

    J'ai découpé les réponse en fonction des balises pour avoir en 2ème argument le premier pattern :

    cat $fic1 |
    awk 'BEGIN{numC=0;numD=0;FS="b"}
    {
    if ( $2 ~ ">CRM</") {numC++;print numC " " $0}
    else if ($2 ~ ">DRM</") {numD++;print numD " " $0}
    }
    ' > $fic2
    Merci.

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

Discussions similaires

  1. [awk] Afficher le pattern et la 4ème ligne d'après
    Par doudoubens dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 20/11/2014, 15h22
  2. Lecture du livre 'Design Pattern Tete la premiere'
    Par kaneelhadji dans le forum Livres
    Réponses: 20
    Dernier message: 06/02/2012, 10h47
  3. Lecture du livre 'Design Pattern Tete la premiere'
    Par kaneelhadji dans le forum Design Patterns
    Réponses: 20
    Dernier message: 06/02/2012, 10h47
  4. Réponses: 6
    Dernier message: 13/03/2010, 11h02
  5. Equivalence du range pattern (awk '/debut/,/fin/ ..)
    Par florent dans le forum Langage
    Réponses: 3
    Dernier message: 22/02/2010, 15h11

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