Zeitstempel vor/hinter Textzeile per Skript

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
ericmk
Beiträge: 1
Registriert: 25.05.2013 17:18:26

Zeitstempel vor/hinter Textzeile per Skript

Beitrag von ericmk » 25.05.2013 17:24:01

Hi all,

ich habe folgendes Problem:
Ich habe eine Datei mit ca. 120.000Zeilen. Alle 180-200 Zeilen steht -> Begin:DATUM/ZEIT
danach folgen die 180-200 Zeilen die den Messpunkt zu diesem Zeitpunkt haben.

Da ich die Datei mit Excel weiterverarbeiten will, benötige ich die Zeit entweder vor jeder der 200 Zeilen oder danach (so dass sie im Excel als eigene Spalte auftaucht)

Die Problematikm besteht also, dass jeweils von Begin bis Begin die Zeilen dazwischen mit dem ausgelesen Datum versehen werden sollen.

Irgendeine Lösung wie ich das hinbekommen könnte?

Thx
ericmk

syssi
Beiträge: 2951
Registriert: 24.12.2010 16:50:59
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Rheinland

Re: Zeitstempel vor/hinter Textzeile per Skript

Beitrag von syssi » 25.05.2013 17:39:35

In der Skriptsprache deines Vertrauens die Datei zeilenweise einlegen. Eine Variable definieren, welche immer den letzten Zeitstempel enthaelt. Eine Bedingung entscheidet, ob es sich um eine Zeitstempelzeile handelt und die Variable aktualisiert werden muss. Wenn nicht, dann wird die gelesene Zeile ausgegeben mit vorangestelltem Zeitstempel (Variable).

Als Bash-Skript (ohne dem Einsatz von IFS) sieht es so aus:

Code: Alles auswählen

TSTAMP=0

while read line
do 
  if echo $line | grep -q ^Begin
  then
    TSTAMP=$(echo $line | cut -d: -f2)
  else
    echo $TSTAMP,$line
  fi
done < test.dat
Inhalt meiner test.dat:

Code: Alles auswählen

Begin:1369496069
1
2
3
4
5
Begin:1369496083
1
2
3
4
5
Ausgabe:

Code: Alles auswählen

1369496069,1
1369496069,2
1369496069,3
1369496069,4
1369496069,5
1369496083,1
1369496083,2
1369496083,3
1369496083,4
1369496083,5

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

Re: Zeitstempel vor/hinter Textzeile per Skript

Beitrag von Phineas » 25.05.2013 22:49:16

Einmal Hüh, eimal Hott, was willst Du denn jetzt wirklich?
http://www.unixboard.de/vb3/showthread. ... le-stellen

Exakte Problembeschreibungen erleichtern die Hilfe sehr.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Zeitstempel vor/hinter Textzeile per Skript

Beitrag von rendegast » 26.05.2013 10:51:39

Alle 180-200 Zeilen steht -> Begin:DATUM/ZEIT
Die Ausgangsdatei per 'csplit' separieren? In etwa

Code: Alles auswählen

csplit Ausgangsdatei '/^Begin:/' {*}
Dann zBsp. die entstandenen Dateien nach der Sekundenzeit der Begin-Zeile umbenennen.
Das Format dieser Zeitangabe kann per 'date' umformatiert werden.
Ein 'grep . *' gibt Dir dann eine Ausgabe des Inhalts aller Dateien mit der Sekundenzeit (dem Dateinamen) am Anfang.


EDIT Vorraussetzung für Brauchbarkeit ist, daß die Meldungen auch maximal sekündlich eintreffen,
und die Zeitangabe diese Auflösung widerspiegelt.
'date' hat die Möglichkeit, auch kleinere Abstände / höhere Auflösung wiederzugeben, 'date +%s%N'.
Zuletzt geändert von rendegast am 26.05.2013 11:44:50, insgesamt 2-mal geändert.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

syssi
Beiträge: 2951
Registriert: 24.12.2010 16:50:59
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Rheinland

Re: Zeitstempel vor/hinter Textzeile per Skript

Beitrag von syssi » 26.05.2013 11:14:32

rendegast hat geschrieben:
Alle 180-200 Zeilen steht -> Begin:DATUM/ZEIT
Die Ausgangsdatei per 'csplit' separieren? In etwa

Code: Alles auswählen

csplit Ausgangsdatei '/^Begin:/' {*}
Dann zBsp. die entstandenen Dateien nach der Sekundenzeit der Begin-Zeile umbenennen.
Das Format dieser Zeitangabe kann per 'date' umformatiert werden.
Ein 'grep . *' gibt Dir dann eine Ausgabe des Inhalts aller Dateien mit der Sekundenzeit (dem Dateinamen) am Anfang.
Smart. :-)

Antworten