Traiter XML avec awk
Résolu
GHISLINO
Messages postés
214
Date d'inscription
Statut
Membre
Dernière intervention
-
GHISLINO Messages postés 214 Date d'inscription Statut Membre Dernière intervention -
GHISLINO Messages postés 214 Date d'inscription Statut Membre Dernière intervention -
Bonjour ,
Je veux traiter un fichier xml en récupérant juste les infos spécifiques: ci-dessous le fichiers.
Fichier brut
je veux le fichier ci-dessous en sortie
Merci d'avance
Je veux traiter un fichier xml en récupérant juste les infos spécifiques: ci-dessous le fichiers.
Fichier brut
<managedObject class="HW" version="HW1.0" distName="PLMN-PLMN/RNC-302/WBTS-2262/HW-1" id="1548162"> <p name="NEType">WBTS</p> <p name="locationName">Cogefar</p> <p name="operationalState">enabled</p> <p name="systemTitle">Nokia Flexi WCDMA Base Station</p> <p name="vendorName">Nokia Siemens Networks</p> </managedObject> <managedObject class="MODULE" version="HW1.0" distName="PLMN-PLMN/RNC-302/WBTS-2262/HW-1/MODULE-173" id="1548177"> <p name="identificationCode">472181A</p> <p name="state">working</p> <p name="subrackSpecificType">472181A-173</p> <p name="userLabel">FSMF</p> <p name="vendorName">Nokia Siemens Networks</p> </managedObject> <managedObject class="MODULE" version="HW1.0" distName="PLMN-PLMN/RNC-302/WBTS-2262/HW-1/MODULE-19" id="1548175"> <p name="identificationCode">472182A</p> <p name="serialNumber">K9164589860</p> <p name="state">working</p> <p name="subrackSpecificType">472182A-19</p> <p name="userLabel">FBBA</p> <p name="vendorName">Nokia Siemens Networks</p> <p name="version">103</p> </managedObject> <managedObject class="MODULE" version="HW1.0" distName="PLMN-PLMN/RNC-302/WBTS-2262/HW-1/MODULE-20" id="1548176"> <p name="identificationCode">472182A</p> <p name="serialNumber">F7164734988</p> <p name="state">working</p> <p name="subrackSpecificType">472182A-20</p> <p name="userLabel">FBBA</p> <p name="vendorName">Nokia Siemens Networks</p> <p name="version">103</p> </managedObject> <managedObject class="MODULE" version="HW1.0" distName="PLMN-PLMN/RNC-302/WBTS-2262/HW-1/MODULE-40192" id="1548174"> <p name="identificationCode">472956A</p> <p name="serialNumber">K9162904080</p> <p name="state">working</p> <p name="subrackSpecificType">472956A-40192</p> <p name="userLabel">FRGU</p> <p name="vendorName">Nokia Siemens Networks</p> <p name="version">101</p> </managedObject> <managedObject class="HW" version="HW1.0" distName="PLMN-PLMN/RNC-302/WBTS-2269/HW-1" id="1547974"> <p name="NEType">WBTS</p> <p name="locationName">Kotto-Eglise-EPC</p> <p name="operationalState">enabled</p> <p name="systemTitle">Nokia Flexi WCDMA Base Station</p> <p name="vendorName">Nokia Siemens Networks</p> </managedObject> <managedObject class="MODULE" version="HW1.0" distName="PLMN-PLMN/RNC-302/WBTS-2269/HW-1/MODULE-173" id="1547975"> <p name="identificationCode">472181A</p> <p name="state">working</p> <p name="subrackSpecificType">472181A-173</p> <p name="userLabel">FSMF</p> <p name="vendorName">Nokia Siemens Networks</p> </managedObject> <managedObject class="MODULE" version="HW1.0" distName="PLMN-PLMN/RNC-302/WBTS-2269/HW-1/MODULE-19" id="1547977"> <p name="identificationCode">472182A</p> <p name="serialNumber">K9164589908</p> <p name="state">working</p> <p name="subrackSpecificType">472182A-19</p> <p name="userLabel">FBBA</p> <p name="vendorName">Nokia Siemens Networks</p> <p name="version">103</p> </managedObject> <managedObject class="MODULE" version="HW1.0" distName="PLMN-PLMN/RNC-302/WBTS-2269/HW-1/MODULE-40192" id="1547979"> <p name="identificationCode">472854A</p> <p name="serialNumber">K9164118730</p> <p name="state">working</p> <p name="subrackSpecificType">472854A-40192</p> <p name="userLabel">FRGY</p> <p name="vendorName">Nokia Siemens Networks</p> <p name="version">101</p> </managedObject> <managedObject class="MODULE" version="HW1.0" distName="PLMN-PLMN/RNC-302/WBTS-2269/HW-1/MODULE-40448" id="1547978"> <p name="identificationCode">472854A</p> <p name="serialNumber">K9164118753</p> <p name="state">working</p> <p name="subrackSpecificType">472854A-40448</p> <p name="userLabel">FRGY</p> <p name="vendorName">Nokia Siemens Networks</p> <p name="version">101</p> </managedObject> <managedObject class="MODULE" version="HW1.0" distName="PLMN-PLMN/RNC-302/WBTS-2269/HW-1/MODULE-40704" id="1547976"> <p name="identificationCode">472854A</p> <p name="serialNumber">K9164118777</p> <p name="state">working</p> <p name="subrackSpecificType">472854A-40704</p> <p name="userLabel">FRGY</p> <p name="vendorName">Nokia Siemens Networks</p> <p name="version">101</p> </managedObject> </cmData> </raml>
je veux le fichier ci-dessous en sortie
Site; MODULE ;FSMF;FBBA;FRGY;FRGU Kotto-Eglise-EPC;WBTS-2269 ;1 ;1 ;3 ;0 Cogefar; WBTS-2262 ;1 ;2 ;0 ;1
Merci d'avance
A voir également:
- Awk xml
- Xml download - Télécharger - Édition & Programmation
- Office xml handler - Télécharger - Traitement de texte
- Driveimage xml - Télécharger - Sauvegarde
- Le XML A quoi ca sert? ✓ - Forum Programmation
- Awk strftime - Forum Shell
6 réponses
essayer
$ cat f2.awk
func f1() {t["FSMF"]=t["FBBA"]=t["FRGY"]=t["FRGU"]=0}
func f2(p1, p2, p3, p4, p5, p6) {printf "%-20s;%-10s;%-4s;%-4s;%-4s;%-4s\n", p1, p2, p3, p4, p5, p6}
BEGIN {f1(); f2("Site", "MODULE", "FSMF", "FBBA", "FRGY", "FRGU")}
/cmData|<managedObject class="HW"/ && n {f2( n, a[3], t["FSMF"], t["FBBA"], t["FRGY"], t["FRGU"]); f1()}
/<managedO.*HW/ {split($0, a, "/")}
/location/ {n=$3}
/userLab/ {t[$3]++}
$ awk -F "[<>]" -f f2.awk fichier.xml
Site ;MODULE ;FSMF;FBBA;FRGY;FRGU
Cogefar ;WBTS-2262 ;1 ;2 ;0 ;1
Kotto-Eglise-EPC ;WBTS-2269 ;1 ;1 ;3 ;0
$
hello Dubcek ,
il faut extraire les données suivantes:
WBTS-2262 de la ligne <managedObject class="HW" version="HW1.0" distName="PLMN-PLMN/RNC-302/WBTS-2262/HW-1" id="1548162">
Cogefar de cette ligne <p name="locationName">Cogefar</p>
FSMF de cette ligne <p name="userLabel">FSMF</p>
FBBA de cette ligne <p name="userLabel">FBBA</p>
FRGU de cette ligne <p name="userLabel">FRGU</p>
donc pour le nom Cogefar on aura le tableau ci-dessous avec le décompte des module
Merci d'avance.
il faut extraire les données suivantes:
WBTS-2262 de la ligne <managedObject class="HW" version="HW1.0" distName="PLMN-PLMN/RNC-302/WBTS-2262/HW-1" id="1548162">
Cogefar de cette ligne <p name="locationName">Cogefar</p>
FSMF de cette ligne <p name="userLabel">FSMF</p>
FBBA de cette ligne <p name="userLabel">FBBA</p>
FRGU de cette ligne <p name="userLabel">FRGU</p>
donc pour le nom Cogefar on aura le tableau ci-dessous avec le décompte des module
Site; MODULE ;FSMF;FBBA;FRGY;FRGU Cogefar; WBTS-2262 ;1 ;2 ;0 ;1
Merci d'avance.
Bonjour Dubcek
Merci pour ton feedback le script marche parfaitement ,
Mais s'il te plait peut-tu m'expliquer le contenu du script f2.awk
Cdlt.
Merci pour ton feedback le script marche parfaitement ,
Mais s'il te plait peut-tu m'expliquer le contenu du script f2.awk
Cdlt.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
surtout cette ligne
je suppose que P1 P2 P3 P4 P5 P6 représente les champs
Site; MODULE ;FSMF;FBBA;FRGY;FRGU
que représente la ligne
Merci d'avance pour ton retour
func f2(p1, p2, p3, p4, p5, p6) {printf "%-20s;%-10s;%-4s;%-4s;%-4s;%-4s\n", p1, p2, p3, p4, p5, p6}
je suppose que P1 P2 P3 P4 P5 P6 représente les champs
Site; MODULE ;FSMF;FBBA;FRGY;FRGU
que représente la ligne
printf "%-20s;%-10s;%-4s;%-4s;%-4s;%-4s\n",
Merci d'avance pour ton retour
func f1() {t["FSMF"]=t["FBBA"]=t["FRGY"]=t["FRGU"]=0}
func f2(p1, p2, p3, p4, p5, p6) {printf "%-20s;%-10s;%-4s;%-4s;%-4s;%-4s\n", p1, p2, p3, p4, p5, p6}
on crée 2 fonctions, pour du code appelé plusieurs fois
f1 initialise à 0 les éléments du tableau associatif t
f2 imprime bien alignés les 6 paramètres (p1-6) passés à la fonction
%-20s : 20 car. alignés à gauche, %-10s 10 car. alignés à gauche, etc.
BEGIN {f1(); f2("Site", "MODULE", "FSMF", "FBBA", "FRGY", "FRGU")}
on inialise t et on affiche les en-têtes des colonnes
/cmData|<managedObject class="HW"/ && n {f2( n, a[3], t["FSMF"], t["FBBA"], t["FRGY"], t["FRGU"]); f1()}
à chaque début de bloc sauf le premier (&& n) ou en fin de fichier (cmData) on affiche les résultats par f2 et on réinitialise t par f1
/<managedO.*HW/ {split($0, a, "/")}
on stocke dans le tableau a les éléments de l'en-tête de bloc séparés par / (a[3]=WBTS...)
/location/ {n=$3}
on recupère le nom
/userLab/ {t[$3]++}
on compte dans le tableau t les lignes contenant FSMF, FBBA, FRGY, FRGU
func f2(p1, p2, p3, p4, p5, p6) {printf "%-20s;%-10s;%-4s;%-4s;%-4s;%-4s\n", p1, p2, p3, p4, p5, p6}
on crée 2 fonctions, pour du code appelé plusieurs fois
f1 initialise à 0 les éléments du tableau associatif t
f2 imprime bien alignés les 6 paramètres (p1-6) passés à la fonction
%-20s : 20 car. alignés à gauche, %-10s 10 car. alignés à gauche, etc.
BEGIN {f1(); f2("Site", "MODULE", "FSMF", "FBBA", "FRGY", "FRGU")}
on inialise t et on affiche les en-têtes des colonnes
/cmData|<managedObject class="HW"/ && n {f2( n, a[3], t["FSMF"], t["FBBA"], t["FRGY"], t["FRGU"]); f1()}
à chaque début de bloc sauf le premier (&& n) ou en fin de fichier (cmData) on affiche les résultats par f2 et on réinitialise t par f1
/<managedO.*HW/ {split($0, a, "/")}
on stocke dans le tableau a les éléments de l'en-tête de bloc séparés par / (a[3]=WBTS...)
/location/ {n=$3}
on recupère le nom
/userLab/ {t[$3]++}
on compte dans le tableau t les lignes contenant FSMF, FBBA, FRGY, FRGU