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 :

nawk /patern1/, /patern2/ condition


Sujet :

Linux

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2008
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 39
    Points : 32
    Points
    32
    Par défaut nawk /patern1/, /patern2/ condition
    Bonjour,
    a l'aide de nawk j'essaie de "recupere" des blocs avec une condition:
    dasn le fichier (xml) suivant je voudrait simplement recupere les blocs
    situés entre <patern1> et </patern1> mais seulement ceux qui ont l'adresse XXX

    voila la ligne que j'utilise(?)
    awk '/<patern1>/,/<\patern1>/ {if ($_ ~/.>YYY<./) {print}}' fichier1.xml > fichier2.xml

    ......
    <patern1>
    <nom>TOTO</nom>
    <prenom>AAAA</prenom>
    <adresse>BBBB</adresse>
    </patern1>
    ...........
    ...........
    <patern1>
    <nom>TATA</nom>
    <prenom>XXX</prenom>
    <adresse>YYY</adresse>
    </patern1>

    Merci philippe

  2. #2
    Nouveau membre du Club
    Inscrit en
    Juillet 2008
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 39
    Points : 32
    Points
    32
    Par défaut erratum:c'etait recupere si adresse=YYY
    Bonjour,
    a l'aide de nawk j'essaie de "recupere" des blocs avec une condition:
    dasn le fichier (xml) suivant je voudrait simplement recupere les blocs
    situés entre <patern1> et </patern1> mais seulement ceux qui ont l'adresse YYY

    voila la ligne que j'utilise(?)
    awk '/<patern1>/,/<\patern1>/ {if ($_ ~/.>YYY<./) {print}}' fichier1.xml > fichier2.xml

    ......
    <patern1>
    <nom>TOTO</nom>
    <prenom>AAAA</prenom>
    <adresse>BBBB</adresse>
    </patern1>
    ...........
    ...........
    <patern1>
    <nom>TATA</nom>
    <prenom>XXX</prenom>
    <adresse>YYY</adresse>
    </patern1>

    Merci philippe

  3. #3
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Points : 5 915
    Points
    5 915
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    awk 'BEGIN{RS="<patern1>" ; ORS="<patern1>" ; RT=">" } {  if ( $0 ~ /<[^>]*>YYY<[^>]*>/ ) print $0 } ' FILE.TXT

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juillet 2008
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 39
    Points : 32
    Points
    32
    Par défaut <patern1=.....> </patern1>
    Bonjour, et merci pour votre reponse....
    Malheureusement cela me cree un fichier vide
    En fait la structure est faite comme cela

    ......
    <patern1="toto">
    <nom>TOTO</nom>
    <prenom>AAAA</prenom>
    <adresse>BBBB</adresse>
    </patern1>
    ...........
    ...........
    <patern1="tata">
    <nom>TATA</nom>
    <prenom>XXX</prenom>
    <adresse>YYY</adresse>
    </patern1>

    le <patern1='..."> est different avec son ceontenu
    j'essai donc de prendre que le debut de la chaine en inserant un ^

  5. #5
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Points : 5 915
    Points
    5 915
    Par défaut
    Ce n'était pas précisé dans le post initial ....

    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
    19
    20
    21
     
    {
                  Re=$0
                  PrintRecord=0
     
                  if ( $0 ~ /<patern1[^>]*>/ )
                  {
                          while( $0 !~ /<\/patern1[^>]*>/ )
                          {
                                  getline
                                  if ( $0 ~ /<[^>]*>YYY<[^>]*>/ )
                                  {
                                         PrintRecord=1;
                                  }
                                       Re=Re"\n"$0
                          }
     
                  if ( PrintRecord == 1 ) print Re
                  }
     
         }

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juillet 2008
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 39
    Points : 32
    Points
    32
    Par défaut <patern1>
    Bonjour,
    ca fonctionne maintenant
    je marque en "résolu"
    Merci

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

Discussions similaires

  1. Condition If multiple
    Par M1000 dans le forum ASP
    Réponses: 2
    Dernier message: 01/03/2004, 13h46
  2. [MYSQL] conditions et requetes
    Par sebos63 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 26/02/2004, 16h41
  3. Condition sur debug et release
    Par xave dans le forum MFC
    Réponses: 3
    Dernier message: 04/02/2004, 15h04
  4. Condition et contenu TImage
    Par Detlev_linux dans le forum Langage
    Réponses: 6
    Dernier message: 23/12/2003, 01h00
  5. boucle avec condition d'arret changeante
    Par NicoH dans le forum Langage
    Réponses: 3
    Dernier message: 10/06/2003, 11h48

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