[Shell] Création de plusieurs fichiers XML
Résolu
Zent
-
Zent -
Zent -
Salut tlm!!
Voilà, j'ai besoin de réaliser un script shell, et je n'arrive malheuresement pas à appliquer mes peu de connaissances pour réaliser ce que je veux.
A la base, j'ai un fichier à plat du type:
data1 value1
data2 value2
data3 value3
Chaque ligne est séparée par une tabulation.
Je voudrais pouvoir créer un fichier XML pour chaque ligne, avec pour nom le numéro de la ligne.
Par exemple on aurait test_1.xml :
<data>data1</data><value>value1</value>
test_2.xml :
<data>data2</data><value>value2</value>
etc etc
J'ai voulu faire une boucle couplée à un awk:
numero=1
while read line ;do
while $numero<10 ; do
awk -F " " '{ print "<data>"$1"</data><value>"$2"</value>" }' entree> test_$numero.xml
numero=$((1+$numero))
done
done < entree
Mais effectivement, ce script ne peut pas marcher... Il crée des milliers de fichiers avec à l'intérieur :
<data>data1</data><value>value1</value>
<data>data2</data><value>value2</value>
<data>data3</data><value>value3</value>
Quelqu'un peut m'aider à remettre tout ça dans l'ordre?? Je me rends bien compte que je ne peux pas coupler le awk et le while, mais je vois pas bien comment...
Merci !!!
Voilà, j'ai besoin de réaliser un script shell, et je n'arrive malheuresement pas à appliquer mes peu de connaissances pour réaliser ce que je veux.
A la base, j'ai un fichier à plat du type:
data1 value1
data2 value2
data3 value3
Chaque ligne est séparée par une tabulation.
Je voudrais pouvoir créer un fichier XML pour chaque ligne, avec pour nom le numéro de la ligne.
Par exemple on aurait test_1.xml :
<data>data1</data><value>value1</value>
test_2.xml :
<data>data2</data><value>value2</value>
etc etc
J'ai voulu faire une boucle couplée à un awk:
numero=1
while read line ;do
while $numero<10 ; do
awk -F " " '{ print "<data>"$1"</data><value>"$2"</value>" }' entree> test_$numero.xml
numero=$((1+$numero))
done
done < entree
Mais effectivement, ce script ne peut pas marcher... Il crée des milliers de fichiers avec à l'intérieur :
<data>data1</data><value>value1</value>
<data>data2</data><value>value2</value>
<data>data3</data><value>value3</value>
Quelqu'un peut m'aider à remettre tout ça dans l'ordre?? Je me rends bien compte que je ne peux pas coupler le awk et le while, mais je vois pas bien comment...
Merci !!!
A voir également:
- [Shell] Création de plusieurs fichiers XML
- Classic shell - Télécharger - Personnalisation
- Xml download - Télécharger - Édition & Programmation
- Renommer plusieurs fichiers en même temps - Guide
- Creation de site web - Guide
- Creation de compte google - Guide
23 réponses
Par contre, juste un détail.
Dans ta commade :
perl -ne 'open F, ">>test${.}.xml";s/^(\S+)\s+(\S+)/<data>$1<\/data><value>$2<\/value>/;print F;close F;' plop
Si je comprends bien, le caractère séparateur est \s+. Mais si un jour dans une des variables il faut que j'ai un espace, bah là ca ne va plus.
J'ai donc pensé à changer le caractère séparateur (par exemple prenons ";") :
perl -ne 'open F, ">>test${.}.xml";s/^(\S+)\;(\S+)/<data>$1<\/data><value>$2<\/value>/;print F;close F;' plop
Jusque là tout va bien.
Sauf que si dans mon fichier en entrée j'ai :
a a;b
En sortie je me retrouve avec test1.xml:
a a;b
Comme on peut le constater je connais rien du tout en perl, donc je rame un peu.
J'ai essayé de regarder le man, mais je ne vois pas comment résoudre ce problème.
Merci :)
Dans ta commade :
perl -ne 'open F, ">>test${.}.xml";s/^(\S+)\s+(\S+)/<data>$1<\/data><value>$2<\/value>/;print F;close F;' plop
Si je comprends bien, le caractère séparateur est \s+. Mais si un jour dans une des variables il faut que j'ai un espace, bah là ca ne va plus.
J'ai donc pensé à changer le caractère séparateur (par exemple prenons ";") :
perl -ne 'open F, ">>test${.}.xml";s/^(\S+)\;(\S+)/<data>$1<\/data><value>$2<\/value>/;print F;close F;' plop
Jusque là tout va bien.
Sauf que si dans mon fichier en entrée j'ai :
a a;b
En sortie je me retrouve avec test1.xml:
a a;b
Comme on peut le constater je connais rien du tout en perl, donc je rame un peu.
J'ai essayé de regarder le man, mais je ne vois pas comment résoudre ce problème.
Merci :)