Bonjour,

Je suis actuellement stagiaire dans une entreprise et il m'est demandé de réaliser un script shell (Ou alors python ou perl) qui réponde aux exigences suivantes :

Je récupère un fichier à partir d'une URL.
Ce fichier est au format JSON et je dois le parser pour récupérer uniquement les champs qui m'intéressent. ("Nom d'un module" et "Valeur du module")

Je dois ensuite comparer la valeur, pour chaque module, à celle définie dans un autre fichier et remonter des erreurs à un logiciel de supervision si la valeur d'un module ne correspond pas à celle contenue dans le fichier de configuration.

Ce que je sais faire actuellement, c'est la récupération du fichier JSON et la création d'un autre fichier contenant les informations qui m'intéressent :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
wget --http-user=admin --http-password=admin 192.168.1.38/api/devices
 
awk -F"[,:]" 
'{
	for(i=1;i<=NF;i++)
	{
		for(j=i;j<=NF;j++)
		{
                        #Je recherche les champs "name" et "value" dans mon fichier
			if($i~/name/ && $j~/value/)
			{
				print "{"$i":"$(i+1)","$j":"$(j+1)"}," > "fichier"
			}
		}
	} 
}' devices
Le fichier devices ressemble à ça au départ :
http://pastebin.com/pCACXgrs

Et le fichier que je génère, nommé "fichier" dans le code, ressemble à ça :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
{"name":"Temp 1","value":"22.7"},
{"name":"Humi 1","value":"65"},
{"name":"6a porte principale","value":"1"},
{"name":"6a porte arriere","value":"1"},
{"name":"6b porte principale","value":"0"},
{"name":"6b porte arriere","value":"1"},
Etc ..
J'ai même réussi à re-créer la structure d'un fichier JSON, en sortie, pour peut être mieux le manipuler par la suite.

Quoiqu'il en soit, je ne vois pas comment réussir à comparer la valeur numérique de ce fichier à celui de configuration qui ressemblerait à ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
{"name":"Temp 1","value_ref_min":"20","value_ref_max":"25"},
{"name":"Humi 1","value_ref_min":"50","value_ref_max":"70"},
{"name":"6a porte principale","value_ref_min":"0","value_ref_max":"0"},
{"name":"6a porte arriere","value_ref_min":"0","value_ref_max":"0"},
{"name":"6b porte principale","value_ref_min":"0","value_ref_max":"0"},
{"name":"6b porte arriere","value_ref_min":"0","value_ref_max":"0"},
Avez vous des idées ? Est-ce possible de manière simple ?


Cordialement,