[Script awk ou ksh] Découper un fichier xml
Résolu/Fermé
Ranmakun
Messages postés
23
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
29 décembre 2008
-
15 mai 2007 à 10:33
tof1976 - 18 sept. 2007 à 18:20
tof1976 - 18 sept. 2007 à 18:20
A voir également:
- Awk xml
- Xml viewer - Télécharger - Édition & Programmation
- Office xml handler - Télécharger - Traitement de texte
- Driveimage xml - Télécharger - Sauvegarde
- Oxygen xml - Télécharger - Divers Web & Internet
- Download xml failed check your firewall ✓ - Forum Windows
16 réponses
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
15 mai 2007 à 21:40
15 mai 2007 à 21:40
Salut,
voilà une approche simpliste qui fonctionne
bien sûr qu'on peut faire ce que tu veux mais ça sera mieux d'avoir un fichier pour pouvoir le parser
voilà une approche simpliste qui fonctionne
bien sûr qu'on peut faire ce que tu veux mais ça sera mieux d'avoir un fichier pour pouvoir le parser
$ cat t.xml <xml>elem1</xml>BLABLA<xml>elem2</xml>TOTOTITI<xml>elem3</xml> <xml>elem4</xml>BLABLA <xml>elem5</xml>TOTOTITI<xml>elem6</xml> <xml>elem7</xml>BLABLA<xml>elem8</xml> TOTOTITI<xml>elem9</xml> <xml>elem10</xml> BLABLA <xml>elem11</xml>TOTOTITI<xml>elem12</xml> <xml>elem13</xml> BLABLA <xml>elem14</xml> $ perl -ne '$"="\n";@t=/(<xml>(?!<\/xml>).*?<\/xml>)/g; print "@t\n"' t.xml <xml>elem1</xml> <xml>elem2</xml> <xml>elem3</xml> <xml>elem4</xml> <xml>elem5</xml> <xml>elem6</xml> <xml>elem7</xml> <xml>elem8</xml> <xml>elem9</xml> <xml>elem10</xml> <xml>elem11</xml> <xml>elem12</xml> <xml>elem13</xml> <xml>elem14</xml>
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
16 mai 2007 à 09:43
16 mai 2007 à 09:43
Salut,
(j'ai finir par obtenir ce que je voulait avec un script Perl uniquement)
C'est un script Perl que je t'ai proposé, mais le plus important c'est que tu as obtenu ce que tu veux.
A savoir que ce que je t'ai donné peut être écrit dans un script Perl, puisque c'est un script Perl :-)
Et puisque tu parles de Perl, quand tu veux parser de XML pense à XML::PARSER et Cie
Bonne continuation
(j'ai finir par obtenir ce que je voulait avec un script Perl uniquement)
C'est un script Perl que je t'ai proposé, mais le plus important c'est que tu as obtenu ce que tu veux.
A savoir que ce que je t'ai donné peut être écrit dans un script Perl, puisque c'est un script Perl :-)
Et puisque tu parles de Perl, quand tu veux parser de XML pense à XML::PARSER et Cie
Bonne continuation
Ranmakun
Messages postés
23
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
29 décembre 2008
15 mai 2007 à 11:45
15 mai 2007 à 11:45
UP, je ne trouves toujours pas de solution, heeeeelp T.T
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
15 mai 2007 à 12:25
15 mai 2007 à 12:25
Salut,
Je pourrais le faire avec perl, mais si tu regardes ce thread à compter de message 5, tu pourrais peut être arrivé avec sed
extraction de plusieurs lignes avec shell#5
Je pourrais le faire avec perl, mais si tu regardes ce thread à compter de message 5, tu pourrais peut être arrivé avec sed
extraction de plusieurs lignes avec shell#5
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
15 mai 2007 à 13:20
15 mai 2007 à 13:20
Salut,
Avec "awk" c'est le même principe qu'avec "sed", à savoir :
;-))
Avec "awk" c'est le même principe qu'avec "sed", à savoir :
awk '/<données>/,/<\/données>/ { print $0 }' fichierreste à trouver la boucle qui va bien pour traiter chaque itération et l'envoyer dans un fichierX++...
;-))
dubcek
Messages postés
18756
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
18 décembre 2024
5 622
15 mai 2007 à 14:18
15 mai 2007 à 14:18
la commande csplit est faite pour cela:
NAME
csplit - split files based on context
SYNOPSIS
csplit [-ks][-f prefix][-n number] file arg1 ...argn
DESCRIPTION
The csplit utility shall read the file named by the file operand, write all or part of that file into other files as directed by the arg operands, and write the sizes of the files.
EXAMPLES
1.
This example creates four files, cobol00 ... cobol03:
csplit -f cobol file '/procedure division/' /par5./ /par16./
After editing the split files, they can be recombined as follows:
cat cobol0[0-3] > file
Note that this example overwrites the original file.
http://pwet.fr/man/linux/commandes/posix/csplit/
NAME
csplit - split files based on context
SYNOPSIS
csplit [-ks][-f prefix][-n number] file arg1 ...argn
DESCRIPTION
The csplit utility shall read the file named by the file operand, write all or part of that file into other files as directed by the arg operands, and write the sizes of the files.
EXAMPLES
1.
This example creates four files, cobol00 ... cobol03:
csplit -f cobol file '/procedure division/' /par5./ /par16./
After editing the split files, they can be recombined as follows:
cat cobol0[0-3] > file
Note that this example overwrites the original file.
http://pwet.fr/man/linux/commandes/posix/csplit/
Ranmakun
Messages postés
23
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
29 décembre 2008
15 mai 2007 à 14:37
15 mai 2007 à 14:37
Ben merci de vos réponse je vais voir ce que si c'est jouable en perl mais vu que je ne connais pas ce langage j'ai des doutes :p
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
15 mai 2007 à 14:42
15 mai 2007 à 14:42
tu peux essayer la commande que t'a donné dubcek ou avec sed ou awk
si jamais perl s'impose, pas de problème je t'aiderai :-))
si jamais perl s'impose, pas de problème je t'aiderai :-))
Ranmakun
Messages postés
23
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
29 décembre 2008
15 mai 2007 à 14:56
15 mai 2007 à 14:56
Je suis en train d'essayer la commande csplit mais ça a pas l'air de marcher :x
J'essaie avec un fichier test.xml qui contient
je lance la commande csplit -f hope test.xml "/<xml>/" et j'obtiens un fichier hope00 qui est complètement vide, et un fichier hope01 qui contient la même chose que test.xml, où est mon erreur ? :/
J'essaie avec un fichier test.xml qui contient
</xml>zefhoizefozebf<xml></xml>sfnzoefnzeiof<xml></xml>nfoifgioero<xml>
je lance la commande csplit -f hope test.xml "/<xml>/" et j'obtiens un fichier hope00 qui est complètement vide, et un fichier hope01 qui contient la même chose que test.xml, où est mon erreur ? :/
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
15 mai 2007 à 15:19
15 mai 2007 à 15:19
perl -ne 'print if #<xml>#..#</xml>#' fichier
très simplist
pour savoir c'est bien aussi de savoir la structure de fichier
Ranmakun
Messages postés
23
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
29 décembre 2008
15 mai 2007 à 15:34
15 mai 2007 à 15:34
Erf ça marche pas...
Je vais essayer de faire un script perl qui lit le fichier ligne par ligne et qui ecrit dans des fichiers de sortie en fonction de ce qu'il trouve, mais je sais pas si je vais arriver à obtenir ce que je voulais dans mon 1er post :x
perl -ne 'print if #<xml>#..#</xml>#' test.xml syntax error at -e line 1, at EOF Execution of -e aborted due to compilation errors.
Je vais essayer de faire un script perl qui lit le fichier ligne par ligne et qui ecrit dans des fichiers de sortie en fonction de ce qu'il trouve, mais je sais pas si je vais arriver à obtenir ce que je voulais dans mon 1er post :x
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
15 mai 2007 à 15:54
15 mai 2007 à 15:54
perl -ne 'print if #<xml># .. #</xml>#' fichier
comme ça, il y a espace après le 1er # et avant le 2ème #
Ranmakun
Messages postés
23
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
29 décembre 2008
15 mai 2007 à 17:01
15 mai 2007 à 17:01
Toujours la même ^^"
perl -ne 'print if #<xml># .. #</xml>#' test.xml syntax error at -e line 1, at EOF Execution of -e aborted due to compilation errors.
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
15 mai 2007 à 21:53
15 mai 2007 à 21:53
Pour obtenir ce que tu as besoin, un script en Perl ou Python (:-)) faire mieux l'affaire.
Je ne veux pas me lancer si je n'ai pas un fichier sur lequel je pourrais travailler :-))
Je ne veux pas me lancer si je n'ai pas un fichier sur lequel je pourrais travailler :-))
Ranmakun
Messages postés
23
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
29 décembre 2008
16 mai 2007 à 09:36
16 mai 2007 à 09:36
Merci beaucoup de votre aide, je n'ai pas adopté une des solutions proposée ici en particulier mais vos contributions m'ont grandement aidé à m'aiguiller vers la méthode que j'ai utilisé pour y arriver (j'ai finir par obtenir ce que je voulait avec un script Perl uniquement) ^^
snake0
Messages postés
4
Date d'inscription
mardi 3 juillet 2007
Statut
Membre
Dernière intervention
7 février 2008
1 août 2007 à 14:32
1 août 2007 à 14:32
csplit -f fic_ file.xml '/<données>>/' '{*}'
tu vas obtenir ce que tu veux
en tous cas merci à dubcek pour la merveilleuse commande csplit
tu vas obtenir ce que tu veux
en tous cas merci à dubcek pour la merveilleuse commande csplit
18 sept. 2007 à 14:59
une question par rapport à ce qui a été proposé :
$ perl -ne '$"="\n";@t=/(<xml>(?!<\/xml>).*?<\/xml>)/g; print "@t\n"' t.xml
<xml>elem1</xml>
<xml>elem2</xml>
<xml>elem3</xml>
<xml>elem4</xml>
<xml>elem5</xml>
Est ce qu'il est possible de passer en paramètre la balise (ici xml , dans <xml> et </xml>) afin de pouvoir chercher dynamiquement n'importe quelle valeur ?
Merci
18 sept. 2007 à 15:25
c'est ça que tu veux? et --
lami20j
18 sept. 2007 à 15:33
c'est presque ça, en fait je voudrais passer la valeur de la balise non pas dans le script perl, mais à l'extérieur su script perl, en 2e argument à coté du fichier (aaa et bbb dans tes exemples) mais je ne sais pas si c'est possible....
la raison de cela c'est que je veux pouvoir renseigner la balise par le contenu d'une variable venant du script KSH appelant ce bout en perl.
(hors là le bout en perl étant entre simple quotes , toutes les résolutions de variables venant du ksh ne fonctionnent pas)
redis moi si je ne suis pas clair...
18 sept. 2007 à 16:50