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 :
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)
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 ; }
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 :
quelqu'un peut m'aider ?
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
Merci
Partager