Zeitstempel in jeder Zeile automatisch setzen

Hallo Leute,

habe hier dieses Problemchen. Diese Frage war schon behandelt worden und liegt im Archiv. (/t/linux-bash-in-jede-ausgabezeile-einen-zeitstempel…

Leider komme ich mit dieser Beschreibung nicht ganz klar.
Folgende Konfiguration ist vorhanden:
Linux Mint; RS232 zur Aufnahme des Datenstroms mit 13 Blöcken, die alle 10 sec reinkommen. Ich hatte auch schon mit Putty gearbeitet - klappte aber auch nicht. Vor diesen 13 Blöcken (die Zahlen sind mit einem Leerzeichen von einander getrennt) soll nun der Zeitstempel gesetzt werden. Wenn möglich sollte noch jeden Tag soll eine Datei angelegt werden.

Folgendes habe ich schon probiert:

#!/bin/bash

Das Skript initialisiert bei Bedarf den seriellen Port.

Die Daten werden vom Port gelesen

und auf verschiedene Arten weiter verarbeitet.

COM-Port einstellen siehe „man stty“

bei Bedarf eine der beiden Zeilen aktivieren / editieren

#stty -F /dev/ttyS0 57600 parodd
#stty -F /dev/ttyS0 9600

echo „Starte Empfang“

Es wird von Com0 gelesen.

gawk fgt Datum und Zeit ein

Bitte eine Zeile aktivieren:

Lesen und anzeigen

#cat /dev/ttyS0

Lesen | Datum und Zeit dazu auf Terminal ausgeben

#cat /dev/ttyS0 | gawk ‚{ print strftime("%D %T"), ($0) }‘

Lesen > in logfile1 schreiben

#cat /dev/ttyS0 > logfile1

Lesen | Datum Zeit dazu > in logfile2 schreiben

#cat /dev/ttyS0 | gawk ‚{ print strftime("%D %T"), ($0) > „logfile2“ }‘
#cat /dev/ttyS0 | gawk ‚{ print strftime("%D %T"); printf „%c“, $0 }‘

Vielen Dank für eine Antwort
Gruß Frank

Hallo Frank,

Diese Frage war schon behandelt
worden und liegt im Archiv.
(/t/linux-bash-in-jede-ausgabezeile-einen-zeitstempel…

Leider komme ich mit dieser Beschreibung nicht ganz klar.

Die Perl-Lösung sieht doch gut aus. Woran hängt es denn konkret?

Folgendes habe ich schon probiert:

Leider schreibst Du ja nicht, wie bei deinen Lösungsversuchen das Ergebnis aussieht, was da noch fehlt, oder was gar nicht geht.
Da mein serieller Port gerade nicht mit mir reden will, habe ich ihn mal durch ein ping ersetzt:

#!/bin/bash
for i in {1..5}; do
 echo $(date; ping -c1 localhost) \>\>log.txt
 sleep 3
done

das liefert mir in log.txt diese Ausgabe (ping hab ich gekürzt):

Di 3. Apr 20:10:12 CEST 2012 PING localhost (127.0.0.1) 56(84) bytes of data
Di 3. Apr 20:10:15 CEST 2012 PING localhost (127.0.0.1) 56(84) bytes of data
Di 3. Apr 20:10:18 CEST 2012 PING localhost (127.0.0.1) 56(84) bytes of data
Di 3. Apr 20:10:21 CEST 2012 PING localhost (127.0.0.1) 56(84) bytes of data
Di 3. Apr 20:10:24 CEST 2012 PING localhost (127.0.0.1) 56(84) bytes of data

date solltest Du jetzt nach deinen Wünschen umformatieren, aber das Prinzip ist hoffentlich klar.
Aber ehrlich gesagt, keine Ahnung ob sich das für dein Problem so machen lässt, wenn Du das ping durch cat /dev/ttyS0 ersetzt.
Und muss es denn unbedingt mit der Shell gemacht werden, ein paar Zeilen in C würden das mit dem Datum eventuell erleichtern.
Du könntest auch syslog bzw. syslog-ng für deine Zwecke ausnutzen. Syslog sorgt dann selbst für das Datum und das Kommando logger schickt die Nachrichten an syslog, in deinem Fall also das, was Du vom seriellen Port einliest. Das ist jetzt bloß eine grobe Vorstellung, zum genauen Ausgestalten fehlt mir gerade die Geduld. Tipps zum Umgang damit gibt es hier:
http://de.linwiki.org/wiki/Linuxfibel_-_System-Admin…
http://www.wikidorf.de/reintechnisch/Inhalt/SyslogNG…
Ist vielleicht mit Kanonen auf Spatzen schiessen, hätte aber zumindest den Vorteil, daß Du mit logrotate täglich eine neue Datei anlegen kannst.

Viele Grüße
Marvin