Supprimer chaîne de caractères entre <> et...
bob737
Messages postés
157
Statut
Membre
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
J'ai deux fichiers fichiers qui contiennent les éléments suivants
Fichier toto
<bucket_billing_info>
<name>paxq1<name>
<vpool_id>urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global<vpool_id>
<total_size>2730.2338<total_size>
<total_size_unit>GB<total_size_unit>
<total_objects>103981727<total_objects>
<total_mpu_size>0<total_mpu_size>
<total_mpu_parts>0<total_mpu_parts>
<TagSet>
<bucket_billing_info>
et
Fichier titi
<bucket_billing_info>
<name>paxq3<name>
<vpool_id>urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global<vpool_id>
<total_size>0<total_size>
<total_size_unit>GB<total_size_unit>
<total_objects>3<total_objects>
<total_mpu_size>0<total_mpu_size>
<total_mpu_parts>0<total_mpu_parts>
<TagSet>
<bucket_billing_info>
1)Je souhaite garder uniquement les valeurs et donc supprimer tous les éléments <blabla>
2) Puis pour chaque paragraphe, mettre toutes les valeurs sur une ligne.
ici même, on m'avait aidé et donné la solution suivante qui fonctionne pour toto:
awk -F "[<>]" '$3 "" {if(n++)printf ";"; printf $3} /bucket_billi/ {print ""; n=0} ' toto | awk NF
=> paxq1;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;2730.2338;GB;103981727
mais qui ne fonctionne pas pour le fichier titi car les lignes contenants "0" ne sont pas pris en compte, les champs n'apparaissent pas sur le résultat final
=> paxq3;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;GB;3
Pourquoi? avez-vous une solution?
Merci de votre aide.
J'ai deux fichiers fichiers qui contiennent les éléments suivants
Fichier toto
<bucket_billing_info>
<name>paxq1<name>
<vpool_id>urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global<vpool_id>
<total_size>2730.2338<total_size>
<total_size_unit>GB<total_size_unit>
<total_objects>103981727<total_objects>
<total_mpu_size>0<total_mpu_size>
<total_mpu_parts>0<total_mpu_parts>
<TagSet>
<bucket_billing_info>
et
Fichier titi
<bucket_billing_info>
<name>paxq3<name>
<vpool_id>urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global<vpool_id>
<total_size>0<total_size>
<total_size_unit>GB<total_size_unit>
<total_objects>3<total_objects>
<total_mpu_size>0<total_mpu_size>
<total_mpu_parts>0<total_mpu_parts>
<TagSet>
<bucket_billing_info>
1)Je souhaite garder uniquement les valeurs et donc supprimer tous les éléments <blabla>
2) Puis pour chaque paragraphe, mettre toutes les valeurs sur une ligne.
ici même, on m'avait aidé et donné la solution suivante qui fonctionne pour toto:
awk -F "[<>]" '$3 "" {if(n++)printf ";"; printf $3} /bucket_billi/ {print ""; n=0} ' toto | awk NF
=> paxq1;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;2730.2338;GB;103981727
mais qui ne fonctionne pas pour le fichier titi car les lignes contenants "0" ne sont pas pris en compte, les champs n'apparaissent pas sur le résultat final
=> paxq3;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;GB;3
Pourquoi? avez-vous une solution?
Merci de votre aide.
A voir également:
- Supprimer chaîne de caractères entre <> et...
- Supprimer rond bleu whatsapp - Guide
- Impossible de supprimer une page word - Guide
- Impossible de supprimer un fichier - Guide
- Caractères spéciaux - Guide
- Supprimer pub youtube - Accueil - Streaming
5 réponses
Finalement, j'ai trourvé. :-)
awk -F "[<>]" 'BEGIN {n=0} {if(n++)printf ";"; printf "%s", $3} /bucket_billi/ {print ""; n=0} ' titi
=> paxq3;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;0;GB;3;0;0;;
awk -F "[<>]" 'BEGIN {n=0} {if(n++)printf ";"; printf "%s", $3} /bucket_billi/ {print ""; n=0} ' titi
=> paxq3;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;0;GB;3;0;0;;
salut,
tu es sûr du format de ces fichiers ?
c'est toi qui les génères, ou d'où viennent-ils ?
ce n'est pas du XML correct : il n'y a pas de fermeture d'étiquette :
--------------------------^
tu es sûr du format de ces fichiers ?
c'est toi qui les génères, ou d'où viennent-ils ?
ce n'est pas du XML correct : il n'y a pas de fermeture d'étiquette :
<tag>value</tag>
--------------------------^
Le bon format est
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<namespace_billing_info>
<namespace>paxq</namespace>
<total_size>18038.8706</total_size>
<total_size_unit>GB</total_size_unit>
<total_objects>190526136</total_objects>
<total_mpu_size>0</total_mpu_size>
<total_mpu_parts>0</total_mpu_parts>
<sample_time>2018-09-17T14:48:23Z</sample_time>
<bucket_billing_info>
<name>paxq2</name>
<vpool_id>urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global</vpool_id>
<total_size>362.8567</total_size>
<total_size_unit>GB</total_size_unit>
<total_objects>11357245</total_objects>
<total_mpu_size>0</total_mpu_size>
<total_mpu_parts>0</total_mpu_parts>
<TagSet/>
</bucket_billing_info>
<bucket_billing_info>
<name>paxq3</name>
<vpool_id>urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global</vpool_id>
<total_size>0</total_size>
<total_size_unit>GB</total_size_unit>
<total_objects>3</total_objects>
<total_mpu_size>0</total_mpu_size>
<total_mpu_parts>0</total_mpu_parts>
<TagSet/>
</bucket_billing_info>
<bucket_billing_info>
<name>paxq0</name>
<vpool_id>urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global</vpool_id>
<total_size>14943.2213</total_size>
<total_size_unit>GB</total_size_unit>
<total_objects>75111814</total_objects>
<total_mpu_size>0</total_mpu_size>
<total_mpu_parts>0</total_mpu_parts>
<TagSet/>
</bucket_billing_info>
<bucket_billing_info>
<name>paxq1</name>
<vpool_id>urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global</vpool_id>
<total_size>2732.7926</total_size>
<total_size_unit>GB</total_size_unit>
<total_objects>104057074</total_objects>
<total_mpu_size>0</total_mpu_size>
<total_mpu_parts>0</total_mpu_parts>
<TagSet/>
</bucket_billing_info>
<next_marker/>
<uptodate_till>2018-09-08T08:05:00.000</uptodate_till>
</namespace_billing_info>
et je veux obtenir:
paxq;18038.8928;GB;190526459;2018-09-17T14:50:07Z
paxq2;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;362.8632;GB;11357300
paxq3;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;0;GB;3
paxq0;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;14943.2213;GB;75111814
paxq1;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;2732.8083;GB;104057342
:-) J'y arrive mais je dois bidouiller pas mal... C'est assez moche et pas franchement dynamique.
Les valeurs de <total_mpu_size> et <total_mpu_parts> ne m'intéresse pas.
sinon, ça marche avec
cat fichier | awk -F "[<>]" '$3 "" {if(n++)printf ";"; printf $3} /bucket_billi/ {print ""; n=0} ' toto | awk NF mais si une valeur = 0, elle n’apparaît pas.
Merci
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<namespace_billing_info>
<namespace>paxq</namespace>
<total_size>18038.8706</total_size>
<total_size_unit>GB</total_size_unit>
<total_objects>190526136</total_objects>
<total_mpu_size>0</total_mpu_size>
<total_mpu_parts>0</total_mpu_parts>
<sample_time>2018-09-17T14:48:23Z</sample_time>
<bucket_billing_info>
<name>paxq2</name>
<vpool_id>urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global</vpool_id>
<total_size>362.8567</total_size>
<total_size_unit>GB</total_size_unit>
<total_objects>11357245</total_objects>
<total_mpu_size>0</total_mpu_size>
<total_mpu_parts>0</total_mpu_parts>
<TagSet/>
</bucket_billing_info>
<bucket_billing_info>
<name>paxq3</name>
<vpool_id>urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global</vpool_id>
<total_size>0</total_size>
<total_size_unit>GB</total_size_unit>
<total_objects>3</total_objects>
<total_mpu_size>0</total_mpu_size>
<total_mpu_parts>0</total_mpu_parts>
<TagSet/>
</bucket_billing_info>
<bucket_billing_info>
<name>paxq0</name>
<vpool_id>urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global</vpool_id>
<total_size>14943.2213</total_size>
<total_size_unit>GB</total_size_unit>
<total_objects>75111814</total_objects>
<total_mpu_size>0</total_mpu_size>
<total_mpu_parts>0</total_mpu_parts>
<TagSet/>
</bucket_billing_info>
<bucket_billing_info>
<name>paxq1</name>
<vpool_id>urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global</vpool_id>
<total_size>2732.7926</total_size>
<total_size_unit>GB</total_size_unit>
<total_objects>104057074</total_objects>
<total_mpu_size>0</total_mpu_size>
<total_mpu_parts>0</total_mpu_parts>
<TagSet/>
</bucket_billing_info>
<next_marker/>
<uptodate_till>2018-09-08T08:05:00.000</uptodate_till>
</namespace_billing_info>
et je veux obtenir:
paxq;18038.8928;GB;190526459;2018-09-17T14:50:07Z
paxq2;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;362.8632;GB;11357300
paxq3;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;0;GB;3
paxq0;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;14943.2213;GB;75111814
paxq1;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;2732.8083;GB;104057342
:-) J'y arrive mais je dois bidouiller pas mal... C'est assez moche et pas franchement dynamique.
Les valeurs de <total_mpu_size> et <total_mpu_parts> ne m'intéresse pas.
sinon, ça marche avec
cat fichier | awk -F "[<>]" '$3 "" {if(n++)printf ";"; printf $3} /bucket_billi/ {print ""; n=0} ' toto | awk NF mais si une valeur = 0, elle n’apparaît pas.
Merci
je pratique très peu XSLT et uniquement pour moi, donc j'ai fait un collage de ce que j'ai trouvé sur internet, et ce n'est probablement pas la meilleure manière de faire :
à utiliser avec Xalan, xsltproc, xmllint...
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="utf-8"/>
<xsl:template match="/namespace_billing_info">
<xsl:for-each select=".">
<xsl:value-of select="*[text() != '' and not(self::total_mpu_size) and not(self::total_mpu_parts)]"/><xsl:text>;</xsl:text>
</xsl:for-each>
<xsl:for-each select="bucket_billing_info">
<xsl:for-each select="*[text() != '' and not(self::total_mpu_size) and not(self::total_mpu_parts)]">
<xsl:value-of select="."/><xsl:text>;</xsl:text>
</xsl:for-each><xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>ce qui produit :paxq;paxq2;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;362.8567;GB;11357245;
paxq3;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;0;GB;3;
paxq0;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;14943.2213;GB;75111814;
paxq1;urn:storageos:ReplicationGroupInfo:eea19191-5584-4c65-958b-cc6826f7c588:global;2732.7926;GB;104057074;
à utiliser avec Xalan, xsltproc, xmllint...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question