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 :

Script AWK pour modifier un fichier


Sujet :

Shell et commandes GNU

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Script AWK pour modifier un fichier
    bonjour
    j'ai un fichier de type XML comme celui ci:
    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
     
    <entite id="xxxx">
        <Structure>xxxx</Structure>
        <parent>wwwww</parent>
        <parent>yyyyy</parent>
        <url>zzzzzzz</url>
        <nom>aaaaaaaaaaa</nom>
      </entite>
      <entite id="xxxxxxxxxxxx">
        <Structure>qsdsdf</Structure>
        <parent>fghfg</parent>
        <parent>zsrzerzr</parent>
        <parent>azezrr</parent>
        <url>sdrfsedt</url>
        <nom>qsrzertze</nom>
    </entite>
    cela se répète pas mal de fois, je souhaite effectuer un traitement AWK car la balise "parent" réapparaît plusieurs fois au lieu d'une fois par conteneur 'entite'

    Je souhaite donc renommer les balises 'parent' par 'parent1','parent2' et ainsi de suite, il se peut qu'il y ait dans certains jusqu'à 5 balises 'parent' par 'entite'

    j'ai essayé de faire
    par ce code, mais c'est pas du tout ce que je veux...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    BEGIN{}
    { 
     
    	for (i=1;i<5;i++)
    	{
    	gsub (/<parent>/,"<parent"i">"); print;
     
    	}
     
    }
    END {}
    merci d'avance si quelqu'un a une piste!

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

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

    BEGIN est exécuté avant la lecture du fichier en entrée.

    il n'y a pas de boucle nécessaire.

    une variable quelconque est initialisée quand la ligne contient 'entite'
    la variable est incrémentée dans la fonction gsub quand la ligne contient parent.

    --
    http://nyal.developpez.com/tutoriel/gawk/index.php

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    merci mais comment recuperer la variable utilisée par gsub?

    vous comprenez bien le resultat que je souhaite obtenir?
    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
     
    <entite id="xxxxxxxxxxxx">
        <Structure>qsdsdf</Structure>
        <parent1>fghfg</parent>
        <parent2>zsrzerzr</parent>
        <url>sdrfsedt</url>
        <nom>qsrzertze</nom>
    </entite>
     
    <entite id="xxxxxxxxxxxx">
        <Structure>qsdsdf</Structure>
        <parent1>fghfg</parent>
        <parent2>zsrzerzr</parent>
        <parent3>azezrr</parent>
        <url>sdrfsedt</url>
        <nom>qsrzertze</nom>
    </entite>
    cdt

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    reussi!!

    voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    { 
    	if ($0 ~/<entite/) {i=0} 
    	gsub (/parent/,"parent"i); print; i++;
     
    }

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 596
    Points : 19 481
    Points
    19 481
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '/<entite id/{ n = 0 }; /parent/{gsub("parent","parent"++n)}{ print }'

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

Discussions similaires

  1. [Batch] script batch pour modifier un fichier pdf
    Par yabo84 dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 05/07/2013, 13h22
  2. Script php pour Modifier fichier XML
    Par filoo85 dans le forum Langage
    Réponses: 1
    Dernier message: 18/12/2012, 17h53
  3. Script AWK pour fichiers xyz
    Par Frankii dans le forum Linux
    Réponses: 4
    Dernier message: 26/07/2007, 22h57
  4. Réponses: 1
    Dernier message: 09/02/2007, 23h51
  5. Script shell pour modifier plusieurs fichiers
    Par julio_097 dans le forum Shell et commandes GNU
    Réponses: 10
    Dernier message: 03/10/2006, 13h41

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