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