Hallo,
ich bräuchte Hilfe bei einem Bash-Skript. Ich mach seit 2 Tagen dranrum
un komme nicht vorwärts..
Ich habe einen Ordner in dem mehrere Dateien abliegen. Jede einzelne
Datei hat folgenden Aufbau:
1
{
2
"enabled": true,
3
"start": 1493842500,
4
"start_extra": 0,
5
"stop": 1493844300,
6
"stop_extra": 0,
7
"channel": "d3751afe7fb68fb4a19fb1d482b52787",
8
"channelname": "Das Erste HD",
9
"title": {
10
"ger": "Tagesthemen"
11
},
12
"subtitle": {
13
"ger": "mit Wetter"
14
},
15
"description": {
16
"ger": "Themen u.a.:\n* Vor der Wahl: TV-Duell in Frankreich\n* Unter Druck: Eingeschüchterte Journalisten\n* Auf der Hut: Cybercrime bedroht Deutschland\n* Kommentar von Thomas Baumann (MDR) zum Tag der Pressefreiheit\n\nModeration: Caren Miosga\nProduziert in H"
"filename": "/storage/recordings/Tagesthemen/Tagesthemen-Das Erste HD2017-05-0322-15.ts",
42
"info": [
43
{
44
"type": "H264",
45
"width": 1280,
46
"height": 720,
47
"duration": 1800,
48
"aspect_num": 0,
49
"aspect_den": 0
50
},
51
{
52
"type": "MPEG2AUDIO",
53
"language": "ger",
54
"audio_type": 0
55
},
56
{
57
"type": "MPEG2AUDIO",
58
"language": "mis",
59
"audio_type": 0
60
},
61
{
62
"type": "AC3",
63
"language": "ger",
64
"audio_type": 0
65
},
66
{
67
"type": "TELETEXT"
68
},
69
{
70
"type": "DVBSUB",
71
"language": "ger",
72
"composition_id": 1,
73
"ancillary_id": 1
74
}
75
],
76
"start": 1493842500,
77
"stop": 1493844164
78
}
79
]
80
}
Mich interessiert dabei die Felder "start" und "stop". Hier sind die
Startzeiten bzw. Stoppzeiten der Aufnahme gespeichert. Nun möchte ich
jede einzelne Datei durchsuchen und schauen welches der nächste
Startzeitpunkt vom aktuellen Zeitpunkt ist und in dem Format "
YYMMDDhhmmss" ausgeben, zusätzlich soll die stoppzeit zu der zugehörigen
Startzeit auch ausgegeben werden.
Kann mir jmd helfen?
Danke
Derzeit mache ich es so
"tmp_start=`cat $i | grep '"start":' | cut -f 2 -d " " | cut -f 1 -d
","`" sobald ich temp_start weiterverarbeiten will kommt immer Bad
number in der Konsole.. Was mache ich falsch?
Hi, nee, der Tipp oben mit dem JSON ist schon gut. Parse das als
JSON-Objekt, dann hast Du direkten Zugriff auf die Felder.
Bist Du auf bash angewiesen, oder könntest Du das auf ner
Windows-Maschine mit Powershell machen ? Da gibts JSON-Parser quasi
eingebaut.
Ansonsten Python, auch gut.
LG
Skriptanfänger schrieb:> Derzeit mache ich es so>> "tmp_start=`cat $i | grep '"start":' | cut -f 2 -d " " | cut -f 1 -d> ","`" sobald ich temp_start weiterverarbeiten will kommt immer Bad> number in der Konsole.. Was mache ich falsch?
Nicht direkt falsch, aber 3 Werkzeuge und 4 Aufrufe: etwas viel wenn
eines davon 1x aufgerufen reicht. Das bringt dich direkt in die /Shell
quoting hell/ .
Ungetestet aus dem Verdauungsdämmerzustand:
Das Problem ist mein System läuft libreelec deswegen bin ich von der
Vielfalt her eingeschränkt........ Ich kann keine zusätzlichen Pakete
z.b. installieren etc. Daher mein Ansatz über die Grundfunktionen ;)
Skriptanfänger schrieb:> ich kann keine zusätzlichen Pakete z.b. installieren
Python ist ziemlich sicher schon da, z.B. auf dem Raspi mit:
osmc@osmc:~$ python
Python 2.7.9 (default, Aug 13 2016, 17:56:53)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import json>>>
Kommandozeile vor dem Frühstück für Alle! schrieb:>> Windows-Maschine mit Powershell>> Igitt! POSIX resp. GNU Werkzeuge und auch Python sind definitiv> portabler als PoSh=ProprietaryShit
Ach stell disch net so oo Bub ... wenn eh grad ne Win-Möhre da ist,
reicht für sowas das bissi Posh allemal :-P nicht immer soviel
Berührungsängste haben, Kinners ;-)
Aber erst bei genaueren betrachten des Inhalts sinds wohl eh
Programminfos von KODI wahrscheinlich auf nem RasPi, von daher klar :
Wenn schon ne X-oide Maschine da ist, dann natürlich auch mit
Bordmitteln.
Alles gut
Skriptanfänger schrieb:> Derzeit mache ich es so>> "tmp_start=`cat $i | grep '"start":' | cut -f 2 -d " " | cut -f 1 -d> ","`" sobald ich temp_start weiterverarbeiten will kommt immer Bad> number in der Konsole.. Was mache ich falsch?
Nach dem ersten cut kommt schon nix mehr raus. Mit deinem grep
bekommst du zwei lines ausgespuckt. Diese unterscheiden sich nur in der
Anzahl der führenden Leerzeichen. Damit kannst du die unterscheiden,
falls die Unterscheidung überhaupt wichtig ist. Wenn beide Werte immer
gleich sind, kannst du auch einfach head -n1 oder tail -n1 oder
unique oder sowas benutzen. Den Kram um den eigentlichen Wert herum
bekommst du mit sed weg. Das ist aber insgesamt wie schon erwähnt die
unsaubere Lösung. Das JSON benutzen wie es gedacht ist ist besser. Haste
denn jetzt python zur Verfügung? Und Module?
Skriptanfänger schrieb:> grep: invalid option -- 'P'
Hm.
"-P, --perl-regexp PATTERN is a Perl regular expression".
Eine deiner Einschränkungen vielleicht?
Hier noch eine dreckige Lösung
1
cat file.json | grep start | head -n1 | sed 's/^ *\"start\": *//;s/,.*//' | date +%Y%m%d%H%M%S