Mit Shellscript Textdatei aufsplitten

Antworten
Nachricht
Autor
monparnas

Mit Shellscript Textdatei aufsplitten

#1 Beitrag von monparnas » 29. Apr 2011 15:09

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

Benutzeravatar
Janka
Beiträge: 3585
Registriert: 11. Feb 2006 19:10

#2 Beitrag von Janka » 30. Apr 2011 8:55

Simpelste Variante:

Code: Alles auswählen

$ 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: Alles auswählen

#!/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 Beitrag von monparnas » 02. Mai 2011 10:21

Vielen Dank für Deine Vorschläge.

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

Code: Alles auswählen

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

Vielen Dank!!

Antworten