CSV Datei mit sed manipulieren/optimieren/ergänzen

G

gholos

Allgemeines :
Ich bin mit sed noch ganz am Anfang, awk hab ich noch nicht angefasst und Perl ist
mir auch noch sehr fremd. Daher tue ich mich hier etwas schwer und habe einen bisherigen Lösungsweg
der jemanden der tief in der Materie drinsteckt eventuell nur ein Kopfschüttel abringt. Ich hoffe dass ich
den Weg so weitergehen kann da meine bisherigen Werkzeuge die ich halbwegs anwenden kann, sich
auf einfache Bash-Skripte beschränken. Verweise auf andere sinnvolle und vor allem hier eher angebrachte
Programmiersprachen werden mir im Moment nicht viel helfen.

Zu der Situation :

Von einem Gerät dessen Logs sich nur auf einer Website ansehen lassen habe ich den Inhalt
soweit mittels sed herausfiltern können das sämtlicher Ballast weg ist und am Ende alle Logs
in einer Datei Spaltenweise mit Semikolon getrennt münden. Insgesamt werden auf der Website
maximal 100 Logeinträge angezeigt.

Der Log auf dem Gerät wird nicht gelöscht sondern ständig vom Gerät fortgeschrieben, wobei die älteren
Einträge heraus fliegen. Wenn das Gerät arbeitet erzeugt es im schnitt alle drei bis 20 Minuten einen
Logeintrag. Ziel ist es später die Seite stündlich zu pollen um so eine Logdatei fortlaufend zu erstellen
die alle Einträge die im Laufe der Zeit entstehen enthält, wobei Doppeleinträge misslich wären. Da jede
Zeile ein eindeutiges einmaliges Datum mit Uhrzeit enthält wann das Gerät angefangen hat, habe ich
zumindestens schon eine Idee im Hinterkopf.

Nun zur Teilaufgabe wo ich momentan stolpere:
Die Logdatei mit 9 Spalten soll so manipuliert werden, dass das Datum mit Uhrzeit aus der vierten
Spalte genommen werden soll, in ein Unix Time Stamp umgewandelt und anschließen als neue Spalte
in der Zeile aus der es stammt vorne angefügt werden soll. In der vierten und in der fünften Spalte
soll dann zwischen Datum und Uhrzeit ein Semikolon als Feldtrenner eingefügt werden.
Spalte Ü1/Ü2/Ü3/Ü7/Ü8/Ü9 enthalten unterschiedliche Zeichen und die Länge variert.
Der Inhalt dieser Spalten darf nicht verändert werden. Die Spalten Ü4 und Ü5 sind immer gleich
in der Struktur,Ü4 enthält wann das Gerät angefangen hat, Ü5 wann es fertig war und Ü6 die
Zeit die es gebraucht hat (zeitliche Differenz von Ü5 und Ü4). Als letztes soll noch die Trenner
des Datums (Slash) in ein (Mind) abgeändert werden.

Die CSV Datei sieht Anfangs so aus Feldtrenner Semikolon :
Ü1Ü2Ü3Ü4Ü5Ü6Ü7Ü8Ü9
xxx2013/12/18 03:38:212013/12/18 03:50:3300:11:12xxx
xxx2013/12/18 03:22:572013/12/18 03:25:1000:02:13xxx

x ; x ; x ;;;; x ; x ; x

Gewünscht wäre im ersten Schritt aus dem Datum und der Uhrzeit der vierten Spalten
einen Unix Time Stamp zu generieren der am Anfang der Zeile vorangestellt wird:

ÜneuÜ1Ü2Ü3Ü4Ü5Ü6Ü7Ü8Ü9
1387334301xxx2013/12/18 03:38:212013/12/18 03:50:3300:11:12xxx
1387333377 xxx2013/12/18 03:22:572013/12/18 03:25:1000:02:13xxx

Gewünscht wäre im zweiten Schritt in die vierte und die fünfte Spalte jeweils zwischen
Datum und Uhrzeit den bereits verwendeten Feldtrenner Semikolon einzufügen
ÜneuÜ1Ü2Ü3Ü4Ü4neuÜ5Ü5neuÜ6Ü7Ü8Ü9
1387334301xxx2013/12/1803:38:212013/12/1803:50:3300:11:12xxx
1387333377 xxx2013/12/1803:22:572013/12/1803:25:1000:02:13xxx

und im dritten Schritt dann die Formatierung des Datums zu ändern :

ÜneuÜ1Ü2Ü3Ü4Ü4neuÜ5Ü5neuÜ6Ü7Ü8Ü9
1387334301xxx2013-12-1803:38:212013-12-1803:50:3300:11:12xxx
1387333377 xxx2013-12-1803:22:572013-12-1803:25:1000:02:13xxx

Ich habe die Suchfunktion des Forums und auch des WWW bereits ausgiebig genutzt und verdanke vielen
Beiträgen von hier und anderswo den bisherigen tollen Zwischenstand :D.

Angeblich soll es mit sed gehen einen String zu suchen den Inhalt des Strings zu nehmen an sed weiterzugeben um
in der Zeile wo dieser gefunden wurde eben solchen ganz an Anfang der Zeile voranzustellen.

Die Hinweise die ich bisher gefunden habe um bei dem jetzigen Teilstück zu einer Lösung zu kommen zeigen
zumindestens, dass es irgendwie mit sed funktionieren könnte. Allerdings fällt es mir noch schwer
die gefundenen Codeschnippsel anzupassen, da ich noch nicht so fitt mit sed bin,
aber zumindestens nun nicht mehr ganz bei Null stehe.


Vielen Dank fürs Lesen, ich hoffe ich habe das was mir vorschwebt klar ausgedrückt.
Wenn nun ein paar Denkanstöße von Euch kommen wäre es super. Ich will keine fertige Lösung
sondern sed verstehen lernen. Wenn ich mit sed durch bin, kommt awk und dann Perl.
 
Meine Güte, was für ein Prosa-Thread. Die Schritte sind vorgegeben, sed vorgeschrieben (viel Spaß mit der Umwandlung des Datumsformates nur mit sed).

Ich sehe da jedenfalls nichts, was gegen einen Bash-Script ohne sed sprechen würde. Eine fertige Lösung würde mir hier wesentlich einfacher fallen. Ohne vorgeschriebene Schritte und Tools.
 

Ähnliche Themen

Problem mit SATA

Autostart von X mit google-chrome durch systemd

xrandr: cant open display

Mein Server versendet SPAM in Massen

Finde Fehler im Code nicht

Zurück
Oben