[Shell] Création de plusieurs fichiers XML [Résolu/Fermé]

Signaler
-
 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 !!!

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 :)
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 524
essaie
perl -ne 'open F, ">>test${.}.xml";s/^([^;]+)\;([^;]+)/<data>$1<\/data><value>$2<\/value>/;print F;close F;' plop 
Bon bah je crois que le sujet est clos ^^

Tu m'as enlevé une épine du pied lami20j, encore mille mercis!!!!!!!!!! :):):):):):):):):):)