Page 1 of 1

Mit Shellscript Textdatei aufsplitten

Posted: 29. Apr 2011 15:09
by monparnas
Salut

ich habe ein Textfile, in dem 3 verschiedene Messwerte (Strom = I, Spannung = U, Frequenz= F) wie folgt (mit CR/LF am Ende) abgelegt sind:

I <wert> <timestamp>
F <wert> <timestamp>
U <wert> <timestamp>

Die Zeilen kommen über eine serielle Schnittstelle und werden in eine Datei geschrieben. Die Reihenfolge der Zeilen (I, U, F) ist beliebig, da sie mit verschiedenen Abtastraten gemessen werden.

Ich möchte nun die Datei mit den vielen I, F und U Zeilen auseinander nehmen und 3 Files erstellen: eines mit allen Zeilen die mit I beginnen, ein File für alle Zeilen mit F usw.

Ich könnte das in C programmieren, aber gibts vieleicht eine ganz einfache Möglichkeit aus der Shell?

Habt vielen Dank,


monparnas

Posted: 30. Apr 2011 8:55
by Janka
Simpelste Variante:

Code: Select all

$ grep <Input >Strom '^I' ; grep <Input >Spannung '^U'; grep <Input >Frequenz '^F' 
Input muss dabei aber eine reguläre Datei sein, da die Eingabe dreimal gelesen werden muss, um alle drei Patterns zu erwischen.

Will man mehrere Ausgabedateien auf einen Schlag erzeugen, geht das z.B. mit einem Shellskript:

Code: Select all

#!/usr/bin/bash
while read TYPE VALUE TIMESTAMP DUMMY
do
  echo $TYPE $VALUE $TIMESTAMP >Output.$TYPE
done
Aufruf mit "./MeinSkript </dev/ttyS0" oder ähnlich.
Das kann man natürlich noch beliebig weiter ausfeilen.

Janka

Posted: 02. May 2011 10:21
by monparnas
Vielen Dank für Deine Vorschläge.

Bei der Shellskriptlösung musste ich noch eine kleine Korrektur anbringen:

Code: Select all

&#91;..&#93;
echo $TYPE $VALUE $TIMESTAMP >>Output.$TYPE 
&#91;..&#93;
es bedarf eines >>, sonst steht nur jeweils die letzte Zeile drin.

Vielen Dank!!