Récuper des données d'un fichier xml et les incrires dans mysql

Fermé
xunil2003 - 12 oct. 2013 à 13:37
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 17 oct. 2013 à 18:09
Bonjour,

Dans un fchier xml j'ai besoin de récupérer aux lignes devices les valeurs de : name="" , id="" , room="" afin de les inscrire dans une table mysql.
 ID - name - id - room
Je vous écris par avoir votre avis sur la façon de procéder pour effectuer ce script bash.
Faut il utiliser awk ?
Merci.



Extrait du fichier xml, section device.
<devices>
<device name="4 in 1 sensor (light)" altid="e3" id="45" category="18" subcategory="0" room="20" parent="43" light="1000"></device>
<device name="4 in 1 sensor (motion)" altid="25" id="43" category="4" subcategory="3" room="20" parent="1" tripped="0" lasttrip="1381349395" armed="0" batterylevel="100" temperature="34" light="1000" humidity="40"></device>
<device name="4 in 1 sensor (temp)" altid="e1" id="44" category="17" subcategory="0" room="20" parent="43" temperature="34"></device>
<device name="Battery Monitor" altid="" id="25" category="0" subcategory="-1" room="0" parent="0" status="3"></device>
<device name="Détecteur d'humidité" altid="e5" id="46" category="16" subcategory="0" room="20" parent="43" humidity="40"></device>
<device name="Embedded Humidity Sensor" altid="e2" id="15" category="16" subcategory="0" room="18" parent="13" humidity="82"></device>
<device name="Embedded Humidity Sensor" altid="e2" id="38" category="16" subcategory="0" room="6" parent="36" humidity="78"></device>
<device name="Embedded Humidity Sensor" altid="e2" id="50" category="16" subcategory="0" room="16" parent="48" humidity="76"></device>
<device name="Embedded Temperature Sensor" altid="e1" id="14" category="17" subcategory="0" room="18" parent="13" temperature="21" humidity="60"></device>
<device name="Embedded Temperature Sensor" altid="e1" id="37" category="17" subcategory="0" room="6" parent="36" temperature="21"></device>
<device name="Embedded Temperature Sensor" altid="e1" id="49" category="17" subcategory="0" room="16" parent="48" temperature="23"></device>
<device name="Ensemble TV Chambre des invités" altid="21" id="42" category="3" subcategory="0" room="5" parent="1" status="0" kwh="0.0000" watts="0" state="-1" comment=""></device>
<device name="Ensemble TV chambre des parents" altid="19" id="40" category="3" subcategory="0" room="16" parent="1" status="0" kwh="0.0000" watts="0" state="-1" comment=""></device>
<device name="Lampadaire" altid="9" id="11" category="3" subcategory="0" room="18" parent="1" status="1" kwh="0.1000" watts="10" state="-1" comment=""></device>
<device name="Lumière bureau serveur" altid="14" id="30" category="3" subcategory="0" room="6" parent="1" status="0" kwh="0.0000" watts="0" level="0" state="-1" comment=""></device>
<device name="Lumière variateur" altid="18" id="39" category="2" subcategory="0" room="5" parent="1" status="1" level="100" state="-1" comment=""></device>
<device name="Prises bureau chambre de Loïc" altid="20" id="41" category="3" subcategory="0" room="15" parent="1" status="1" kwh="7.1000" state="-1" comment="" watts="272"></device>
<device name="Samsung TV Remote" altid="" id="21" category="9" subcategory="0" room="18" parent="0" TVIp="" TVModel="UE46D6300"></device>
<device name="Sonde de tempèrature salon (1er étage)" altid="10" id="13" category="1" subcategory="0" room="18" parent="1" batterylevel="90" status="1" temperature="21" humidity="82"></device>
<device name="Temp Humidity Sensor" altid="17" id="36" category="1" subcategory="0" room="6" parent="1" batterylevel="80" status="1" temperature="21" humidity="78"></device>
<device name="Temp Humidity Sensor" altid="27" id="48" category="1" subcategory="0" room="16" parent="1" batterylevel="100" status="1" temperature="23" humidity="67"></device>
<device name="VeraAlerts" altid="" id="23" category="0" subcategory="-1" room="0" parent="0" DB=""></device>
<device name="Webcall Dialer" altid="" id="22" category="3" subcategory="0" room="0" parent="0" status="0"></device>
</devices>


Merci.
A voir également:

10 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
12 oct. 2013 à 14:27
Salut,

Ce qu'il faudrait surtout savoir c'est comment tu attends tes données en sortie ?
Et est-ce que ton échantillon de fichier contient toutes les données du fichier xml ou est-ce uniquement un bout de ton fichier ?

Parce que en partant de ton exemple, juste une simple requête avec grep + sed :

$ grep -P -o '\b(name|id|room)="\K[^"]*' plop | sed 'N;N;s/\n/-/g'
4 in 1 sensor (light)-45-20
4 in 1 sensor (motion)-43-20
4 in 1 sensor (temp)-44-20
Battery Monitor-25-0
Détecteur d'humidité-46-20
Embedded Humidity Sensor-15-18
Embedded Humidity Sensor-38-6
Embedded Humidity Sensor-50-16
Embedded Temperature Sensor-14-18
Embedded Temperature Sensor-37-6
Embedded Temperature Sensor-49-16
Ensemble TV Chambre des invités-42-5
Ensemble TV chambre des parents-40-16
Lampadaire-11-18
Lumière bureau serveur-30-6
Lumière variateur-39-5
Prises bureau chambre de Loïc-41-15
Samsung TV Remote-21-18
Sonde de tempèrature salon (1er étage)-13-18
Temp Humidity Sensor-36-6
Temp Humidity Sensor-48-16
VeraAlerts-23-0
Webcall Dialer-22-0

$
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
12 oct. 2013 à 14:31
Awk est une manière de faire, mais ce n'est pas la seule, en soit n'importe quel langage permettant de parser un fichier (voire parser un fichier xml) peut faire l'affaire.

Ici c'est aussi complètement faisable en shell avec du sed (voire même grep), en perl, en python (en fait c'est faisable avec la plupart des langages mais on va dire que ceux-là s'y prêtent bien).

- Une première stratégie consisterait à créer à chaque fois qu'on lit une ligne construire un dictionnaire ayant pour clé un attribut (name, id...) et en donnée la valeur correspondante. Il suffit ensuite d'écrire la ligne désirée à partir de ce dictionnaire. C'est ce que je ferais si je devais l'écrire en python. On peut imaginer faire de même par exemple en shell mais beaucoup plus fastidieux à écrire.

- Si on a envie de le faire en shell (avec awk ou sed), et si on suppose que l'ordre des attributs est connu, une substitution est suffisante.

Bonne chance
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
12 oct. 2013 à 14:41
Re-

Par contre, et je te l'avais déjà signifié je ne sais plus où, il serait plus correct de ta part de bien vouloir donner signe de vie lorsque tu poses une question et que des personnes te répondent ne serait-ce que pour remercier ces dites personnes et surtout histoire de savoir si la/les solution(s) donnée(s) t'a/ont été utile(s) ;-(

Quelques exemple parmi d'autres :
https://forums.commentcamarche.net/forum/affich-28105947-lister-le-contenu-d-une-table-mysql-dans-un-menu-zenity
https://forums.commentcamarche.net/forum/affich-28846611-connexion-serveur-mysql-via-un-script-bash
https://forums.commentcamarche.net/forum/affich-27929457-comment-ajout-l-utilisateur-admin-dans-un-groupe-d-utilisateur

Merci de faire un effort de ce côté là.
0
xunil2003 Messages postés 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 14
12 oct. 2013 à 17:55
Bonsoir,

Merci pour vos réponses.

Pour l'instant je suis sur du bash.

ZIPE31
J'ai essayé votre commande, qui ne trouve pas la même chose que vous

serveur@serveur-msi:~$ grep -P -o '\b(name|id|room)="\K[^"]*' $HOME/vera/vera_09-10-2013_2246.xml | sed 'N;N;s/\n/-/g'
My Home-1-Banderie
8-Bureau -6
Chambre Loïc (1er étage)-15-Chambre des invités
5-Chambre parent (1er étag-16
Chaudière -7-Couloir R.D.C
4-Couloir escalier -3
Cuisine -12-Cuisine d'été
9-Jardin du bas-21
Jardin du haut-20-S.D.B (1er étage)
14-S.D.B (R.D.C)-19
S.D.S -1-Salon (1er étage)
18-Salon d'été -10
Véranda (1er étage)-13-hall d'entrée
2-Nouvelle scène1-1
6-4 in 1 sensor (light)-45
20-4 in 1 sensor (motion)-43
20-4 in 1 sensor (temp)-44
20-Battery Monitor-25
0-Détecteur d'humidité-46
20-Embedded Humidity Sensor-15
18-Embedded Humidity Sensor-38
6-Embedded Humidity Sensor-50
16-Embedded Temperature Sensor-14
18-Embedded Temperature Sensor-37
6-Embedded Temperature Sensor-49
16-Ensemble TV Chambre des invités-42
5-Ensemble TV chambre des parents-40
16-Lampadaire-11
18-Lumière bureau serveur-30
6-Lumière variateur-39
5-Prises bureau chambre de Loïc-41
15-Samsung TV Remote-21
18-Sonde de tempèrature salon (1er étage)-13
18-Temp Humidity Sensor-36
6-Temp Humidity Sensor-48
16-VeraAlerts-23
0-Webcall Dialer-22
0-Interface-1
Dimmable Light-2-Switch
3-Sensor-4
Remote Control-9-Humidity Sensor
16-Temperature Sensor-17
Light Sensor
18
serveur@serveur-msi:~$

C'est normal car comme je l'ai dit dans mon premier poste seule les lignes avec le mot device. sont a prendre en compte.
Pour bien comprendre, le fichier xml au complet ressemble a ceci :

Fichier xml au complet
<?xml version="1.0"?>
<root full="1" version="*1.5.622*" model="MiCasaVerde VeraLite" zwave_heal="1" temperature="C" serial_number="35108117
" fwd1="fwd7.mios.com" fwd2="fwd8.mios.com" ir="0" irtx="" loadtime="1381350238" dataversion="350321763" state="1" comment="Add/Remove: Ajouter de nouveaux dispositifs maintenant
">
<sections>
<section name="My Home" id="1"></section>
</sections>
<rooms>
<room name="Banderie " id="8" section="1"></room>
<room name="Bureau " id="6" section="1"></room>
<room name="Chambre Loïc (1er étage)" id="15" section="1"></room>
<room name="Chambre des invités" id="5" section="1"></room>
<room name="Chambre parent (1er étag" id="16" section="1"></room>
<room name="Chaudière " id="7" section="1"></room>
<room name="Couloir R.D.C " id="4" section="1"></room>
<room name="Couloir escalier " id="3" section="1"></room>
<room name="Cuisine " id="12" section="1"></room>
<room name="Cuisine d'été " id="9" section="1"></room>
<room name="Jardin du bas" id="21" section="1"></room>
<room name="Jardin du haut" id="20" section="1"></room>
<room name="S.D.B (1er étage)" id="14" section="1"></room>
<room name="S.D.B (R.D.C)" id="19" section="1"></room>
<room name="S.D.S " id="1" section="1"></room>
<room name="Salon (1er étage)" id="18" section="1"></room>
<room name="Salon d'été " id="10" section="1"></room>
<room name="Véranda (1er étage)" id="13" section="1"></room>
<room name="hall d'entrée " id="2" section="1"></room>
</rooms>
<scenes>
<scene active="0" name="Nouvelle scène1" id="1" room="6"></scene>
</scenes>
<devices>
<device name="4 in 1 sensor (light)" altid="e3" id="45" category="18" subcategory="0" room="20" parent="43" light="1000"></device>
<device name="4 in 1 sensor (motion)" altid="25" id="43" category="4" subcategory="3" room="20" parent="1" tripped="0" lasttrip="1381349395" armed="0" batterylevel="100" temperature="34" light="1000" humidity="40"></device>
<device name="4 in 1 sensor (temp)" altid="e1" id="44" category="17" subcategory="0" room="20" parent="43" temperature="34"></device>
<device name="Battery Monitor" altid="" id="25" category="0" subcategory="-1" room="0" parent="0" status="3"></device>
<device name="Détecteur d'humidité" altid="e5" id="46" category="16" subcategory="0" room="20" parent="43" humidity="40"></device>
<device name="Embedded Humidity Sensor" altid="e2" id="15" category="16" subcategory="0" room="18" parent="13" humidity="82"></device>
<device name="Embedded Humidity Sensor" altid="e2" id="38" category="16" subcategory="0" room="6" parent="36" humidity="78"></device>
<device name="Embedded Humidity Sensor" altid="e2" id="50" category="16" subcategory="0" room="16" parent="48" humidity="76"></device>
<device name="Embedded Temperature Sensor" altid="e1" id="14" category="17" subcategory="0" room="18" parent="13" temperature="21" humidity="60"></device>
<device name="Embedded Temperature Sensor" altid="e1" id="37" category="17" subcategory="0" room="6" parent="36" temperature="21"></device>
<device name="Embedded Temperature Sensor" altid="e1" id="49" category="17" subcategory="0" room="16" parent="48" temperature="23"></device>
<device name="Ensemble TV Chambre des invités" altid="21" id="42" category="3" subcategory="0" room="5" parent="1" status="0" kwh="0.0000" watts="0" state="-1" comment=""></device>
<device name="Ensemble TV chambre des parents" altid="19" id="40" category="3" subcategory="0" room="16" parent="1" status="0" kwh="0.0000" watts="0" state="-1" comment=""></device>
<device name="Lampadaire" altid="9" id="11" category="3" subcategory="0" room="18" parent="1" status="1" kwh="0.1000" watts="10" state="-1" comment=""></device>
<device name="Lumière bureau serveur" altid="14" id="30" category="3" subcategory="0" room="6" parent="1" status="0" kwh="0.0000" watts="0" level="0" state="-1" comment=""></device>
<device name="Lumière variateur" altid="18" id="39" category="2" subcategory="0" room="5" parent="1" status="1" level="100" state="-1" comment=""></device>
<device name="Prises bureau chambre de Loïc" altid="20" id="41" category="3" subcategory="0" room="15" parent="1" status="1" kwh="7.1000" state="-1" comment="" watts="272"></device>
<device name="Samsung TV Remote" altid="" id="21" category="9" subcategory="0" room="18" parent="0" TVIp="" TVModel="UE46D6300"></device>
<device name="Sonde de tempèrature salon (1er étage)" altid="10" id="13" category="1" subcategory="0" room="18" parent="1" batterylevel="90" status="1" temperature="21" humidity="82"></device>
<device name="Temp Humidity Sensor" altid="17" id="36" category="1" subcategory="0" room="6" parent="1" batterylevel="80" status="1" temperature="21" humidity="78"></device>
<device name="Temp Humidity Sensor" altid="27" id="48" category="1" subcategory="0" room="16" parent="1" batterylevel="100" status="1" temperature="23" humidity="67"></device>
<device name="VeraAlerts" altid="" id="23" category="0" subcategory="-1" room="0" parent="0" DB=""></device>
<device name="Webcall Dialer" altid="" id="22" category="3" subcategory="0" room="0" parent="0" status="0"></device>
</devices>
<categories>
<categorie name="Interface" id="1"></categorie>
<categorie name="Dimmable Light" id="2"></categorie>
<categorie name="Switch" id="3"></categorie>
<categorie name="Sensor" id="4"></categorie>
<categorie name="Remote Control" id="9"></categorie>
<categorie name="Humidity Sensor" id="16"></categorie>
<categorie name="Temperature Sensor" id="17"></categorie>
<categorie name="Light Sensor" id="18"></categorie>
</categories>
</root>

Merci.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
12 oct. 2013 à 18:41
$ grep '<device ' plop |grep -P -o '\b(name|id|room)="\K[^"]*' | sed 'N;N;s/.*/"&"/Mg;s/\n/ /g'
"4 in 1 sensor (light)" "45" "20"
"4 in 1 sensor (motion)" "43" "20"
"4 in 1 sensor (temp)" "44" "20"
"Battery Monitor" "25" "0"
"Détecteur d'humidité" "46" "20"
"Embedded Humidity Sensor" "15" "18"
"Embedded Humidity Sensor" "38" "6"
"Embedded Humidity Sensor" "50" "16"
"Embedded Temperature Sensor" "14" "18"
"Embedded Temperature Sensor" "37" "6"
"Embedded Temperature Sensor" "49" "16"
"Ensemble TV Chambre des invités" "42" "5"
"Ensemble TV chambre des parents" "40" "16"
"Lampadaire" "11" "18"
"Lumière bureau serveur" "30" "6"
"Lumière variateur" "39" "5"
"Prises bureau chambre de Loïc" "41" "15"
"Samsung TV Remote" "21" "18"
"Sonde de tempèrature salon (1er étage)" "13" "18"
"Temp Humidity Sensor" "36" "6"
"Temp Humidity Sensor" "48" "16"
"VeraAlerts" "23" "0"
"Webcall Dialer" "22" "0"

$
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
xunil2003 Messages postés 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 14
13 oct. 2013 à 10:45
Bonjour,

ZIP31

Quand je mets le résultat en variable ou en fonction
test () { grep '<device ' $HOME/vera/vera_09-10-2013_2246.xml |grep -P -o '\b(name|id|room)="\K[^"]*' | sed 'N;N;s/.*/"&"/Mg;s/\n/ /g'
}
echo ""
echo $(test)
ou
test='grep -P -o '\b(name|id|room)="\K[^"]*' $fichier_device | sed 'N;N;s/\n/-/g''
echo $test
j'ai ceci qui s'affiche :
"4 in 1 sensor (light)" "45" "20" "4 in 1 sensor (motion)" "43" "20" "4 in 1 sensor (temp)" "44" "20" "Battery Monitor" "25" "0" "Détecteur d'humidité" "46" "20" "Embedded Humidity Sensor" "15" "18" "Embedded Humidity Sensor" "38" "6" "Embedded Humidity Sensor" "50" "16" "Embedded Temperature Sensor" "14" "18" "Embedded Temperature Sensor" "37" "6" "Embedded Temperature Sensor" "49" "16" "Ensemble TV Chambre des invités" "42" "5" "Ensemble TV chambre des parents" "40" "16" "Lampadaire" "11" "18" "Lumière bureau serveur" "30" "6" "Lumière variateur" "39" "5" "Prises bureau chambre de Loïc" "41" "15" "Samsung TV Remote" "21" "18" "Sonde de tempèrature salon (1er étage)" "13" "18" "Temp Humidity Sensor" "36" "6" "Temp Humidity Sensor" "48" "16" "VeraAlerts" "23" "0" "Webcall Dialer" "22" "0"

Quand j'exécute ceci :
grep '<device ' $HOME/vera/vera_09-10-2013_2246.xml |grep -P -o '\b(name|id|room)="\K[^"]*' | sed 'N;N;s/.*/"&"/Mg;s/\n/ /g'
ceci s'affiche comme ceci :
"4 in 1 sensor (light)" "45" "20"
"4 in 1 sensor (motion)" "43" "20"
"4 in 1 sensor (temp)" "44" "20"
"Battery Monitor" "25" "0"
"Détecteur d'humidité" "46" "20"
"Embedded Humidity Sensor" "15" "18"
"Embedded Humidity Sensor" "38" "6"
"Embedded Humidity Sensor" "50" "16"
"Embedded Temperature Sensor" "14" "18"
"Embedded Temperature Sensor" "37" "6"
"Embedded Temperature Sensor" "49" "16"
"Ensemble TV Chambre des invités" "42" "5"
"Ensemble TV chambre des parents" "40" "16"
"Lampadaire" "11" "18"
"Lumière bureau serveur" "30" "6"
"Lumière variateur" "39" "5"
"Prises bureau chambre de Loïc" "41" "15"
"Samsung TV Remote" "21" "18"
"Sonde de tempèrature salon (1er étage)" "13" "18"
"Temp Humidity Sensor" "36" "6"
"Temp Humidity Sensor" "48" "16"
"VeraAlerts" "23" "0"
"Webcall Dialer" "22" "0"


le problème est comment y mettre en variable caque champs .
Exemple sur la 1er ligne : "4 in 1 sensor (light)" "45" "20"
Variable1_name="4 in 1 sensor (light)"
Variable2_id="45"
Variable3_room="20"


afin que mysql y insert dans la table.
mysql ...... insert into (...,...,...) ......

Merci.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
13 oct. 2013 à 11:11
$ cat foo.sh 
#!/bin/bash

#set -x

while IFS="-" read var_name var_id var_room
do
echo "var_name = ${var_name}
var_id = ${var_id}
var_room = ${var_room}
"
done < <(grep '<device ' plop |grep -P -o '\b(name|id|room)="\K[^"]*' | sed 'N;N;s/\n/-/g')

$ ./foo.sh
var_name = 4 in 1 sensor (light)
var_id = 45
var_room = 20

var_name = 4 in 1 sensor (motion)
var_id = 43
var_room = 20

var_name = 4 in 1 sensor (temp)
var_id = 44
var_room = 20

var_name = Battery Monitor
var_id = 25
var_room = 0

var_name = Détecteur d'humidité
var_id = 46
var_room = 20

var_name = Embedded Humidity Sensor
var_id = 15
var_room = 18

var_name = Embedded Humidity Sensor
var_id = 38
var_room = 6

var_name = Embedded Humidity Sensor
var_id = 50
var_room = 16

var_name = Embedded Temperature Sensor
var_id = 14
var_room = 18

var_name = Embedded Temperature Sensor
var_id = 37
var_room = 6

var_name = Embedded Temperature Sensor
var_id = 49
var_room = 16

var_name = Ensemble TV Chambre des invités
var_id = 42
var_room = 5

var_name = Ensemble TV chambre des parents
var_id = 40
var_room = 16

var_name = Lampadaire
var_id = 11
var_room = 18

var_name = Lumière bureau serveur
var_id = 30
var_room = 6

var_name = Lumière variateur
var_id = 39
var_room = 5

var_name = Prises bureau chambre de Loïc
var_id = 41
var_room = 15

var_name = Samsung TV Remote
var_id = 21
var_room = 18

var_name = Sonde de tempèrature salon (1er étage)
var_id = 13
var_room = 18

var_name = Temp Humidity Sensor
var_id = 36
var_room = 6

var_name = Temp Humidity Sensor
var_id = 48
var_room = 16

var_name = VeraAlerts
var_id = 23
var_room = 0

var_name = Webcall Dialer
var_id = 22
var_room = 0
0
xunil2003 Messages postés 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 14
Modifié par xunil2003 le 17/10/2013 à 17:00
Bonjour,

Zipe31

Je n'arrive pas a comprendre comment résoudre mon problème via sed ?

J'ai un fichier dans lequel je doit récupérer les fails.

while IFS="-" read  var_Completed var_Device var_LastNote var_NodeDescription
do
echo "var_Completed = ${var_Completed}
var_Device = ${var_Device}
var_LastNote = ${var_LastNote}
var_NodeDescription = ${var_NodeDescription}
"
#echo "date : $Completed"
#echo "id : $Device"
#echo "detail fail : $LastNote"
#echo "Nom du module : $NodeDescription"
#echo ""

done < <(ssh $LOGIN_VERA@$IP_VERA grep "Expiration" $FICHIER | grep -P -o '\b(Completed|Device|LastNote|NodeDescription)="\K[^"]*' | sed 'N;N;s/.*/"&"/Mg;s/\n/ /g')
echo ""

Et voila comment s'affiche le résultat: (La date et l'heure et le numéro id est décalé)
root@192.168.0.5's password: 
var_Completed = "56" "2013
var_Device = 10
var_LastNote = 17 14:09:23" "Expiration du délai d'attente pour la réponse du noeud"
var_NodeDescription =

var_Completed = Lave linge
var_Device =
var_LastNote =
var_NodeDescription =

Ors il faut que le résultat s'affiche comme ceci :
root@192.168.0.5's password: 
var_Completed = 2013 10 17 14:09:23
var_Device = 6
var_LastNote = Expiration du délai d'attente pour la réponse du noeud
var_NodeDescription = Lave linge

Voici une ligne entière
cat LuaUPnP.log | grep Expiration
04 10/17/13 14:09:23.242 <Job ID="1175" Name="OFF node 30" Device="56" Created="2013-10-17 14:08:42" Started="2013-10-17 14:08:42" Completed="2013-10-17 14:09:23" Duration="40.433658000" Runtime="40.432348000" Status="Aborted" LastNote="Expiration du délai d'attente pour la réponse du noeud" Node="30" NodeType="ZWaveNonDimmableLight" NodeDescription="Lave linge"/> <0x2b847680>
root@MiOS_35108117:/tmp/log/cmh#


Comment dois je procéder ?
Merci.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
Modifié par zipe31 le 17/10/2013 à 17:26
Normal, si tu ne changes pas le séparateur dans la variable "$IFS" ;-(

while IFS="-"
à remplacer par
while IFS="|"
.
Ainsi que la partie sed remplacer
sed 'N;N;s/.*/"&"/Mg;s/\n/ /g'
par
sed 'N;N;N;s/.*/"&"/Mg;s/\n/|/g'
.
0
xunil2003 Messages postés 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 14
17 oct. 2013 à 17:26
Re,

Merci Zipe31.

J'ai m'y ceci :
while IFS="|" read  var_Completed var_Device var_LastNote var_NodeDescription
do
echo "var_Completed = ${var_Completed}
var_Device = ${var_Device}
var_LastNote = ${var_LastNote}
var_NodeDescription = ${var_NodeDescription}
"
#echo "date : $Completed"
#echo "id : $Device"
#echo "detail fail : $LastNote"
#echo "Nom du module : $NodeDescription"
#echo ""

done < <(ssh $LOGIN_VERA@$IP_VERA grep "Expiration" $FICHIER | grep -P -o '\b(Completed|Device|LastNote|NodeDescription)="\K[^"]*' | sed 'N;N;s/.*/"&"/Mg;s/\n/|/g')
echo ""

et le résultat est encore décalé
root@192.168.0.5's password: 
var_Completed = "56"
var_Device = "2013-10-17 14:09:23"
var_LastNote = "Expiration du délai d'attente pour la réponse du noeud"
var_NodeDescription =

var_Completed = Lave linge
var_Device =
var_LastNote =
var_NodeDescription =

Merci.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
17 oct. 2013 à 17:29
Oups, je viens de rajouter un N à
sed 'N;N;N;s/.*/"&"/Mg;s/\n/|/g'
; désolé je n'avais pas fait attention qu'il y avait 4 valeurs à prendre en compte ;-(
0
xunil2003 Messages postés 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 14
17 oct. 2013 à 17:55
Re,

Ce n'est pas grave ça m'arrive ainsi.
Êtes vous sûre de la commande sed, car avec :
while IFS="|" read  var_Completed var_Device var_LastNote var_NodeDescription
do
echo "var_Completed = ${var_Completed}
var_Device = ${var_Device}
var_LastNote = ${var_LastNote}
var_NodeDescription = ${var_NodeDescription}
"
#echo "date : $Completed"
#echo "id : $Device"
#echo "detail fail : $LastNote"
#echo "Nom du module : $NodeDescription"
#echo ""

done < <(ssh $LOGIN_VERA@$IP_VERA grep "Expiration" $FICHIER | grep -P -o '\b(Completed|Device|LastNote|NodeDescription)="\K[^"]*' | sed 'N;N;N;s/.*/"&"/Mg;s/\n/|/g'
Y a plus rien ??

Résultat
root@192.168.0.5's password: 

serveur@serveur-msi:~$

Merci.
0
xunil2003 Messages postés 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 14
Modifié par xunil2003 le 17/10/2013 à 18:03
Re,

Zipe31, c'est bon ça marche.

Résultat
root@192.168.0.5's password: 
var_Completed = "56"
var_Device = "2013-10-17 17:59:22"
var_LastNote = "Expiration du délai d'attente pour la réponse du noeud"
var_NodeDescription = "Lave linge"

Avec
while IFS="|" read  var_Completed var_Device var_LastNote var_NodeDescription
do
echo "var_Completed = ${var_Completed}
var_Device = ${var_Device}
var_LastNote = ${var_LastNote}
var_NodeDescription = ${var_NodeDescription}
"
#echo "date : $Completed"
#echo "id : $Device"
#echo "detail fail : $LastNote"
#echo "Nom du module : $NodeDescription"
#echo ""

done < <(ssh $LOGIN_VERA@$IP_VERA grep "Expiration" $FICHIER | grep -P -o '\b(Completed|Device|LastNote|NodeDescription)="\K[^"]*' | sed 'N;N;N;s/.*/"&"/Mg;s/\n/|/g')
echo ""

Encore une fois, merci zipe31.

Mais comment puis je retire chaque " " de la valeur des variables ?
Merci.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
17 oct. 2013 à 18:09
Mais comment puis je retire chaque " " de la valeur des variables ?

Il suffit d'enlever cette partie
s/.*/"&"/Mg
à l'expression avec sed :

sed 'N;N;N;s/\n/|/g'
0
xunil2003 Messages postés 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 14
Modifié par xunil2003 le 17/10/2013 à 18:10
Re?

J'ai trouvé
en remplaçant
sed 'N;N;N;s/.*/"&"/Mg;s/\n/|/g' 
par
sed 'N;N;N;s/.*/ & /Mg;s/\n/|/g' 
résultat
root@192.168.0.5's password: 
var_Completed = 56
var_Device = 2013-10-17 17:59:22
var_LastNote = Expiration du délai d'attente pour la réponse du noeud
var_NodeDescription = Lave linge

Merci.
0