Mit Shellscript Textdatei aufsplitten

Post Reply
Message
Author
monparnas

Mit Shellscript Textdatei aufsplitten

#1 Post 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

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#2 Post 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
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

monparnas

#3 Post 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!!

Post Reply