Bash: hex in dezimal & unixtime in normale Zeit

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Exxter
Beiträge: 383
Registriert: 10.01.2003 00:15:15
Lizenz eigener Beiträge: GNU General Public License

Bash: hex in dezimal & unixtime in normale Zeit

Beitrag von Exxter » 16.11.2017 16:08:12

Hallo,

ich habe folgende Dateien:
....
290;1;2;59d740a5;6e;0;0
291;1;5;59d74616;aa;0;0
....
Die 4 "Spalte" ist die Unixzeit in Hexadezimal. Kennt jemand eine Möglichkeit, diesen String per Bashscript in ein normales Datum zu ändern?
Manuell weiß ich es:

echo $((16#59d78743))
1507297091

und

date -d @1507297091
Fr 6. Okt 15:38:11 CEST 2017

Aber wie geht man das als Script an, welches über x Dateien läuft?

Wäre dankbar für Ideen, ich habe gerade keine mehr :?

Benutzeravatar
Phineas
Beiträge: 348
Registriert: 20.06.2012 20:26:19

Re: Bash: hex in dezimal & unixtime in normale Zeit

Beitrag von Phineas » 16.11.2017 21:19:25

Code: Alles auswählen

#!/bin/bash	
IFS=';'
while read -ra a; do
    a[3]=$(date -d @$((16#${a[3]})))
    echo "${a[*]}"
done <in.txt >out.txt

Exxter
Beiträge: 383
Registriert: 10.01.2003 00:15:15
Lizenz eigener Beiträge: GNU General Public License

Re: Bash: hex in dezimal & unixtime in normale Zeit

Beitrag von Exxter » 17.11.2017 07:51:15

Könntest du mir das Script noch etwas erklären? :hail:

Benutzeravatar
Phineas
Beiträge: 348
Registriert: 20.06.2012 20:26:19

Re: Bash: hex in dezimal & unixtime in normale Zeit

Beitrag von Phineas » 17.11.2017 14:23:30

Das Skript liest die Datei "in.txt" zeilenweise per while-read-Schleife in das Array "a[]" ein und verändert den Inhalt des 4. Feldes a[3] nach Deiner Vorgabe. Der Output landet in der Datei "out.txt".
Die Dateinamen musst Du anpassen.

Exxter
Beiträge: 383
Registriert: 10.01.2003 00:15:15
Lizenz eigener Beiträge: GNU General Public License

Re: Bash: hex in dezimal & unixtime in normale Zeit

Beitrag von Exxter » 17.11.2017 15:20:32

OK, soweit verstanden, vielen vielen Dank! Ich dachte echt, jetzt muss perl oder so ran..

Benutzeravatar
Phineas
Beiträge: 348
Registriert: 20.06.2012 20:26:19

Re: Bash: hex in dezimal & unixtime in normale Zeit

Beitrag von Phineas » 17.11.2017 18:11:51

Die Bash kann solche Dinge durchaus alleine. Vorteil ist wohl der extrem kurze und bequem zu schreibende Code, Nachteil ist die Langsamkeit beim ausführen.
Richtig fix sollte hier (g)awk mittels strftime() und printf() zur Sache gehen können, das kann ich aber nicht aus dem Kopf und zum nachschlagen bin ich zu faul. :D

Antworten