Generer un fichier XML en script shell

Le
azerty
Bonjour,

Je souhaite générer un fichier XML depuis un script shell. Dans mon
script, j'utilise un fichier de configuration qui comporte MACHINE IP
PROJET de type :

> TOTO 192.168.0.1 XML01
> TATA 192.168.0.2 XML01
> TOTO 192.168.0.3 XML01

Je souhaite obtenir un fichier comme celui-ci :

> <root>
>
> <UN="XML01" Machine="TOTO" />
> <UN="XML01" Machine="TATA" />
>
> <DEUX="TOTO" >
> <TROIS="PIF" IP="192.168.0.1" QUATRE="POUF"/>
> <TROIS="PIF" IP="192.168.0.3" QUATRE="POUF"/>
> </DEUX>
>
> <DEUX="TATA" >
> <TROIS="PIF" IP="192.168.0.2" QUATRE="POUF"/>
> </DEUX>
>
> </root>

Voici le script que j'ai déjà écrit mais qui ne me satisfait pas :

> #!/bin/sh
>
> echo "<root>" > source.xml
>
> while read MACHINE IP PROJET
> do
> echo "<UN="$PROJET" Machine="$MACHINE" />" >> source.xml
> done < listing.cfg
>
> while read MACHINE IP PROJET
> do
>
> echo "<DEUX="$MACHINE" >
> <TROIS="PIF" IP="$IP" QUATRE="POUF"/>
> </DEUX>" >> source.xml
> done < listing.cfg
>
> echo "</root>" >> source.xml

Lorsqu'un équipement comporte plusieurs adresses ip, le fichier généré
n'est pas bon.

Merci de votre aide.

Bernard.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Stephane Chazelas
Le #6430631
2008-04-29, 13:26(+02), azerty:
Bonjour,

Je souhaite générer un fichier XML depuis un script shell. Dans mon
script, j'utilise un fichier de configuration qui comporte MACHINE IP
PROJET de type :

TOTO 192.168.0.1 XML01
TATA 192.168.0.2 XML01
TOTO 192.168.0.3 XML01


Je souhaite obtenir un fichier comme celui-ci :

<root>

<UN="XML01" Machine="TOTO" />
<UN="XML01" Machine="TATA" />

<DEUX="TOTO" >
</DEUX>

<DEUX="TATA" >
</DEUX>

</root>
[...]



awk '
{
a[$1] = a[$1] "<TROIS="PIF" IP="" $2 "" QUATRE="POUF"/>n"
b[$1] = $3
}
END {
print "<root>n"
for (i in a)
print "<UN="" b[i] "" Machine="" i "" />"
print ""
for (i in a)
printf "<DEUX="%s" >n%s</DEUX>nn", i, a[i]
print "</root>"
}' < input > output


--
Stéphane


azerty
Le #6431181
Stephane Chazelas wrote:
[...]

awk '
{
a[$1] = a[$1] "<TROIS="PIF" IP="" $2 "" QUATRE="POUF"/>n"
b[$1] = $3
}
END {
print "<root>n"
for (i in a)
print "<UN="" b[i] "" Machine="" i "" />"
print ""
for (i in a)
printf "<DEUX="%s" >n%s</DEUX>nn", i, a[i]
print "</root>"
}' < input > output



Impeccable, merci Stéphane Je ne m'attendais pas à avoir une réponse si
rapide. :)

J'y suis allé doucement ne pensant pas avoir une réponse si rapide.

Peux-tu m'indiquer ce que ça donne avec une donnée supplementaire ?

TOTO 192.168.0.1 XML01 SCRIPT01
TATA 192.168.0.2 XML01 SCRIPT01
TOTO 192.168.0.3 XML01 SCRIPT02

De la forme :

<root>

<UN="XML01" Machine="TOTO" />
<UN="XML01" Machine="TATA" />

<DEUX="TOTO" >
</DEUX>

<DEUX="TATA" >
</DEUX>

<SIX="SCRIPT01" />
</CINQ>

<SIX="SCRIPT01" />
</CINQ>

<SIX="SCRIPT02" />
</CINQ>

</root>

Merci encore.

azerty
Le #6437281
azerty wrote:
Stephane Chazelas wrote:
[...]

awk '
{
a[$1] = a[$1] "<TROIS="PIF" IP="" $2 "" QUATRE="POUF"/>n"
b[$1] = $3
}
END {
print "<root>n"
for (i in a)
print "<UN="" b[i] "" Machine="" i "" />"
print ""
for (i in a)
printf "<DEUX="%s" >n%s</DEUX>nn", i, a[i]
print "</root>"
}' < input > output



Impeccable, merci Stéphane Je ne m'attendais pas à avoir une réponse si
rapide. :)

J'y suis allé doucement ne pensant pas avoir une réponse si rapide.

Peux-tu m'indiquer ce que ça donne avec une donnée supplementaire ?


Soit un fichier texte contenant :

UN DEUX TROIS QUATRE CINQ SIX
[...]

Ou pour x fois UN il peut y avoir plusieurs DEUX, TROIS, QUATRE, etc.

La structure doit être celle-ci :

<root>

<VILLE="TROIS" NOM="UN" />
[...]

<PRENOM="DEUX" >
<CODE="QUATRE" PRENOM="DEUX" PAYS="QUATRE"/>
[...]
</PRENOM>

[...]

<CODE="QUATRE" NOM="DEUX" >
<AGE="SIX" />
[...]
</CODE>

[...]

</root>

Le script peut etre en shell ou en perl.

Merci.


Publicité
Poster une réponse
Anonyme