Traitement de données de XML en Bash

Résolu/Fermé
jeljed Messages postés 1 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 5 janvier 2011 - 5 janv. 2011 à 15:34
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 5 janv. 2011 à 16:37
Bonjour,

j'ai plusieurs fichies xml qui ressemblent à ça:

<track id="TR14.2" mainDir="down">
<trackTopology>
<trackBegin id="TRB14.2" pos="0" absPos="40595">
<macroscopicNode ocpRef="PTCAR885"/>
</trackBegin>
<trackEnd id="TRE14.2" pos="4795" absPos="35800">
<macroscopicNode ocpRef="PTCAR1092"/>
</trackEnd>
</trackTopology>
<trackElements>
<speedChanges>
<speedChange id="S14.2" pos="0" absPos="40595" dir="up" vMax="140"/>
</speedChanges>
<gradientChanges>
<gradientChange id="G14.2.6397" pos="4607" absPos="35988" dir="down" slope="2.2"/>
<gradientChange id="G14.2.6398" pos="3988" absPos="36607" dir="down" slope="2.5"/>
<gradientChange id="G14.2.6399" pos="3588" absPos="37007" dir="down" slope="1.9"/>
<gradientChange id="G14.2.6400" pos="2908" absPos="37687" dir="down" slope="1.7"/>
<gradientChange id="G14.2.6401" pos="1871" absPos="38724" dir="down" slope="0"/>
</gradientChanges>
<radiusChanges>
<radiusChange id="R14.2.6454" pos="4475" absPos="36120" dir="down" radius="2273"/>
<radiusChange id="R14.2.6455" pos="4335" absPos="36260" dir="down" radius="0"/>
<radiusChange id="R14.2.6456" pos="4193" absPos="36402" dir="down" radius="2020"/>
<radiusChange id="R14.2.6457" pos="4193" absPos="36402" dir="down" radius="1961"/>
<radiusChange id="R14.2.6458" pos="4063" absPos="36532" dir="down" radius="5900"/>
<radiusChange id="R14.2.6459" pos="4063" absPos="36532" dir="down" radius="6500"/>
<radiusChange id="R14.2.6460" pos="3918" absPos="36677" dir="down" radius="4762"/>
<radiusChange id="R14.2.6461" pos="3728" absPos="36867" dir="down" radius="3635"/>
<radiusChange id="R14.2.6462" pos="3426" absPos="37169" dir="down" radius="0"/>
</radiusChanges>
<levelCrossings/>
<electrificationChanges>
<electrificationChange id="E14.2" pos="0" absPos="40595" dir="up" type="overhead" voltage="3000"/>
</electrificationChanges>
</trackElements>




Je travail sous Ubuntu et je voudrais ressortir les données de gradient et de radius dans un fichier txt sous la forme:

Gradient:
Pos Slope
Pos Slope

Radius:
Pos Radius
Pos Radius


Quelqu'un aurait il une idée...Je suis débutant dans le domaine...

Merci :)
A voir également:

1 réponse

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
5 janv. 2011 à 16:37
Salut,

$ cat plop 

<track id="TR14.2" mainDir="down">
<trackTopology>                   
<trackBegin id="TRB14.2" pos="0" absPos="40595">
<macroscopicNode ocpRef="PTCAR885"/>            
</trackBegin>                                   
<trackEnd id="TRE14.2" pos="4795" absPos="35800">
<macroscopicNode ocpRef="PTCAR1092"/>            
</trackEnd>                                      
</trackTopology>                                 
<trackElements>                                  
<speedChanges>                                   
<speedChange id="S14.2" pos="0" absPos="40595" dir="up" vMax="140"/>
</speedChanges>                                                     
<gradientChanges>                                                   
<gradientChange id="G14.2.6397" pos="4607" absPos="35988" dir="down" slope="2.2"/>
<gradientChange id="G14.2.6398" pos="3988" absPos="36607" dir="down" slope="2.5"/>
<gradientChange id="G14.2.6399" pos="3588" absPos="37007" dir="down" slope="1.9"/>
<gradientChange id="G14.2.6400" pos="2908" absPos="37687" dir="down" slope="1.7"/>
<gradientChange id="G14.2.6401" pos="1871" absPos="38724" dir="down" slope="0"/>  
</gradientChanges>                                                                
<radiusChanges>                                                                   
<radiusChange id="R14.2.6454" pos="4475" absPos="36120" dir="down" radius="2273"/>
<radiusChange id="R14.2.6455" pos="4335" absPos="36260" dir="down" radius="0"/>   
<radiusChange id="R14.2.6456" pos="4193" absPos="36402" dir="down" radius="2020"/>
<radiusChange id="R14.2.6457" pos="4193" absPos="36402" dir="down" radius="1961"/>
<radiusChange id="R14.2.6458" pos="4063" absPos="36532" dir="down" radius="5900"/>
<radiusChange id="R14.2.6459" pos="4063" absPos="36532" dir="down" radius="6500"/>
<radiusChange id="R14.2.6460" pos="3918" absPos="36677" dir="down" radius="4762"/>
<radiusChange id="R14.2.6461" pos="3728" absPos="36867" dir="down" radius="3635"/>
<radiusChange id="R14.2.6462" pos="3426" absPos="37169" dir="down" radius="0"/>   
</radiusChanges>                                                                  
<levelCrossings/>                                                                 
<electrificationChanges>                                                          
<electrificationChange id="E14.2" pos="0" absPos="40595" dir="up" type="overhead" voltage="3000"/>
</electrificationChanges>                                                                         
</trackElements>                                                                                  

$ awk  'BEGIN {
FS="\""                           
}                                 
{                                 
if (/gradientChange id/)          
{                                 
POS[$4]=$10                       
}                                 
if (/radiusChange id/)            
{                                 
RAD[$4]=$10                       
}
}
END {
print "Gradient:"
for (i in POS) print i" "POS[i]
printf "\nRadius:\n"
for (j in RAD) print j" "RAD[j]
}
' plop > fich.txt

$ cat fich.txt
Gradient:
3988 2.5
2908 1.7
4607 2.2
3588 1.9
1871 0

Radius:
4475 2273
4063 6500
4335 0
3426 0
3918 4762
3728 3635
4193 1961
$

;-))
0