#1 Le 26/05/2014, à 00:46
- Levi59
[resolu] Retirer balises doublons dans fichiers xml
bonjour,
J'aimerais trouver une commande qui me permette de supprimer les ligne en double dans un fichier xml.
Je ne peux pas trier le fichier sans risquer de briser la structure et je ne dois m'attaquer qu'à une seule balise.
Ex :
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<movie>
<sorttitle></sorttitle>
<trailer></trailer>
<rating>6.8</rating>
<year>2013</year>
<runtime>1h 49mn</runtime>
<top250>0</top250>
<genre>Action</genre>
<genre>Comédie</genre>
<genre>Thriller</genre>
<genre>Drama</genre>
<genre>Thriller</genre>
<fileinfo>
<streamdetails>
<video>
<codec>h264</codec>
<aspect>2.4</aspect>
<width>1276</width>
<height>532</height>
<duration>109</duration>
<durationinseconds>6540</durationinseconds>
</video>
<audio>
<codec>aac</codec>
<language>French</language>
<channels>2</channels>
</audio>
<audio>
<codec>aac</codec>
<language>Japanese</language>
<channels>2</channels>
</audio>
<subtitle>
<language>French</language>
</subtitle>
<subtitle>
<language>French</language>
</subtitle>
<subtitle>
<language>French</language>
</subtitle>
</streamdetails>
</fileinfo>
</movie>
Je voudrais nettoyer les balises "<genre>" uniquement qui comme ici sont parfois en double. Je ne veux pas pour autant supprimer les balises language.
Avez-vous une bonne commande pour me permettre de faire ça?
Dernière modification par Levi59 (Le 27/05/2014, à 22:42)
Hors ligne
#2 Le 26/05/2014, à 02:01
- Watael
Re : [resolu] Retirer balises doublons dans fichiers xml
salut,
avec awk, si la ligne contient <genre>, tu vérifies qu'elle est est dans un tableau T : si elle est dans le tableau, tu n'affiches pas la ligne, si elle n'y est pas tu affiches la ligne, et tu alimentes le tableau avec la ligne.
à peu près.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 26/05/2014, à 19:47
- Postmortem
Re : [resolu] Retirer balises doublons dans fichiers xml
Salut,
Un awk tout moche :
awk '/<movie>/{i=0}!/<genre>/||//&&!i++' test.xml
Edit :
On peut le raccourcir encore un peu !
awk '/<movie>/{i=0}!/<genre>/||!i++' test.xml
Dernière modification par Postmortem (Le 26/05/2014, à 19:59)
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#4 Le 26/05/2014, à 21:55
- Levi59
Re : [resolu] Retirer balises doublons dans fichiers xml
j'ai testé sur mon exemple et il me supprime tout sauf la première balise genre...
Je voudrais qu'il me supprime uniquement le "<genre>Thriller</genre>" en trop.
Hors ligne
#5 Le 26/05/2014, à 22:27
- Postmortem
Re : [resolu] Retirer balises doublons dans fichiers xml
Ah, j'avais mal compris, je croyais que tu voulais garder seulement le premier genre qui apparaissait dans chaque film
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#6 Le 26/05/2014, à 22:28
- pingouinux
Re : [resolu] Retirer balises doublons dans fichiers xml
Bonsoir,
Peut-être ceci (en reprenant l'idée de Postmortem #3)
awk '!(/<genre>/&&a[$0]++)' test.xml
Hors ligne
#7 Le 27/05/2014, à 22:42
- Levi59
Re : [resolu] Retirer balises doublons dans fichiers xml
ça a marché parfaitement! Merci ^^
Hors ligne