Brauche Hilfe in einem Script

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Benutzeravatar
treki
Beiträge: 56
Registriert: 25.10.2014 22:48:40

Re: Brauche Hilfe in einem Script

Beitrag von treki » 02.08.2019 07:58:18

Interessant.
Kriege so "state": "on" als antwort und nicht "state": "up"
Zefram Cochrane, 5. April 2063. Cochrane unternimmt den ersten Warpflug der Menschheit, was den Besuch der Vulkanier zurfolge hat (Star Trek 8 - Der Erste Kontakt)

Benutzeravatar
heisenberg
Beiträge: 3556
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Brauche Hilfe in einem Script

Beitrag von heisenberg » 02.08.2019 10:21:49

Debianjq ist ein sehr nützliches Werkzeug um JSON-Daten zu extrahieren:

Aus Deinen obigen Daten...

Code: Alles auswählen

{
	"message": {
		"id": 29,
		"temperature": 16.8,
		"humidity": 21.0,
		"battery": 1
	},
	"origin": "receiver",
	"protocol": "alecto_ws1700",
	"uuid": "0000-00-00-10-203518",
	"repeats": 1
}
{
	"message": {
		"id": 81.0,
		"temperature": 0.0,
		"humidity": 0.0,
		"battery": 1.0
	},
	"origin": "receiver",
	"protocol": "teknihall",
	"uuid": "0000-00-00-10-203518",
	"repeats": 1
}
...
z. B. so:

Alle uuids extrahieren:

Code: Alles auswählen

jq -r ".uuid"  <data.json

#Ausgabe
0000-00-00-10-203518
0000-00-00-10-203518
...
Nur uuids von bestimmten message/ids:

Code: Alles auswählen

jq -r 'select((.message.id==29) or (.message.id==7))|.uuid' <data.json 

#Ausgabe
0000-00-00-10-203518
0000-00-00-10-203518
Werte in Variablen einlesen und ausgeben:

Code: Alles auswählen

while read id temper humid batt ; do
  echo $id $temper $humid $batt
done < <(jq -r '.[] | (.id|tostring) + " " +(.temperature|tostring) + " " 
+ (.humidity|tostring) + " " + (.battery|tostring) ' <data.json 2>/dev/null)

#Ausgabe
29 16.8 21 1
81 0 0 1
0 -67.77 0 1
1023 null null null
null null null null
null null null null
null null null null
null null null null
null null null null
0 0 0 1
null null null null
null null null null
null null null null
7 null null null
0 0 0 1
null null null null
A15 null null null
0 0 0 1
0 -67.77 0 1
0 -67.77 0 1
0 0 0 1
0 -67.77 0 1
0 -67.77 0 1
Siehe: https://stedolan.github.io/jq/
Jede Rohheit hat ihren Ursprung in einer Schwäche.

Antworten