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 :

aide sur un script awk


Sujet :

Linux

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2004
    Messages : 5
    Points : 4
    Points
    4
    Par défaut aide sur un script awk
    Bonjour,
    j'ai un script awk pour traiter un fichier XML (suppression de quelques valises selon l'identifiant).
    par exemple : test.xml :
    <Clients>
    <NB_CLIENTS>10</NB_CLIENTS>
    <client>
    <id>100001</id>
    <bla>blabla</bla>
    </client>
    <client>
    <id>100002</id>
    <bla>blabla2</bla>
    </client>
    ...
    <client>
    <id>100010</id>
    <bla>blabla10</bla>
    </client>

    j'ai une chaine de caracteres contenant les 3 clients à supprimer ids = "100003 100005 100010"

    mon fichier awk :
    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
     
    BEGIN { output=1; debutClient=0; FS="[<>]"; }	
    $2 == "NB_CLIENTS" && $3 ~ /[0-9][0-9][0-9][0-9][0-9][0-9]/ && $4 == "/NB_CLIENTS" {
    	  nbClients=sprintf("%06s", $3-(length(noCli + 1)%7))
    	  sub(/[0-9][0-9][0-9][0-9][0-9][0-9]/, nbClients)
       }
    $2 == "CLIENT" {
    	  debutClient=1; chaineClient=$0
       }
    $2 == "id" && (index(noCli,$3) != 0) && $4 == "/NUMERO_CLIENT" { output=0 }
    $2 != "CLIENT" {
    	  if (output==1) {
    		 if (debutClient==1) {
    			debutClient=0
    			print chaineClient
    		 }
    		 print $0
    	  }
       }
    $2 == "/CLIENT" { output=1 ; }
    j'ai deux problèmes : le premier est la mise à jour des nombres : nbClients=sprintf("%06s", $3-(length(noCli + 1)%7)) marche bien s'il n'y a pas de redondance (meme id dans la chaine)
    et le deuxième avec la condition index(noCli,$3) != 0 car pour un client en la remplacant par $3==noCli ça marche bien !!!

    enfaite j'appelle le script de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nawk -v noCli="100003 100005 100010" -f script.awk test.xml  > resultat.xml
    quelqu'un peut m'aider ?

    Merci

  2. #2
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2004
    Messages : 5
    Points : 4
    Points
    4
    Par défaut tout seul comme un grand
    voilà c'est pour dire que j'ai résolu le problème, le premier je l'ai traité en amont (le shell qui appelle le awk) et le 2e c'était un problème d'ordre.
    merci pour ceux qui ont lu ma question

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

Discussions similaires

  1. Demande d'aide sur un script de mise en forme..
    Par threepwood dans le forum Linux
    Réponses: 4
    Dernier message: 24/08/2007, 14h37
  2. demande d'aide sur un script
    Par threepwood dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 24/05/2007, 11h45
  3. Aide sur un script
    Par odrimont dans le forum Linux
    Réponses: 13
    Dernier message: 03/07/2006, 23h03
  4. Besoin d'aide sur un script SQL de recherche
    Par agougeon dans le forum Langage SQL
    Réponses: 5
    Dernier message: 26/10/2005, 11h40

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