Lektion 5
Nun, da ihr euch offensichtlich langweilt, bringe ich ein Beispiel aus dem wirklichen Leben, muß aber hierzu etwas das Tempo verschärfen.
Das Problem
Hatte in der letzten Woche meine ST-7 Kamera an ein anderes Fernrohr als üblich gehängt, um zu sehen wie gut die Kamera dort im Zusammenspiel mit der FS2 für die Nachführung in Rektaszension eingesetzt werden kann. Meine Aufnahme-Software kann ein Logfile erstellen, das eine Menge von Daten enthält (es folgt der Anfang der Datei, die komplette Datei gibt es hier
http://www.giga-parsec.de/unix-kurs/FS2Imager015.log
...
CCDSoft Tracking Report
Camera: SBIG ST-7/7E/7XE
X Axis: Enabled
Y Axis: Not Enabled
ExposureTime = 2.50
Aggressiveness Factor = 10
Calibration Time X = 10.00
Calibration Time Y = 0.00
Calibration declination = 0.00
Declination now = 0.00
Minimum Move = 0.01
Maximum Move = 3.00
Backlash X = 0.00
Backlash Y = 0.00
Delay After Move = 3.00
Autoguide using Relays
Calibration Determined Velocity Vectors (pixels/sec)
XPlus Speed= 1.06171 (XPlus X= 1.06147, XPlus Y= -0.02254) Angle= 358.78000
XMinus Speed= 1.09111 (XMinus X= -1.09021, XMinus Y= 0.04438) Angle= 177.67000
YPlus Speed= 1.#INF0 (YPlus X= -1.#IND0, YPlus Y= 1.#INF0) Angle= 90.00000
YMinus Speed= 1.#INF0 (YMinus X= -1.#IND0, YMinus Y= -1.#INF0) Angle= 270.00000
|Elapsed Secs|RefCentroidX|RefCentroidY|CurCentroidX|CurCentroidY|GuideErrX |GuideErrY |TotGuideErr |XPlusRelay |XMinusRelay |YPlusRelay
|YMinusRelay |
| 0.0000| 16.0000| 16.0000| 15.7681| 21.5020| -0.2319| 5.5020| 5.5069| 33| 0| 0
| 0|
| 14.5550| 16.0000| 16.0000| 15.8993| 21.0740| -0.1007| 5.0740| 5.0750| 20| 0| 0
| 0|
| 21.7900| 16.0000| 16.0000| 15.7651| 21.5922| -0.2349| 5.5922| 5.5971| 33| 0| 0
| 0|
| 29.2100| 16.0000| 16.0000| 15.5831| 22.3815| -0.4169| 6.3815| 6.3951| 52| 0| 0
| 0|
| 36.2350| 16.0000| 16.0000| 15.9882| 22.1102| -0.0118| 6.1102| 6.1102| 13| 0| 0
| 0|
| 40.1450| 16.0000| 16.0000| 16.2547| 22.3337| 0.2547| 6.3337| 6.3388| 0| 0| 0
| 0|
.....
Vieles davon interessiert mich nicht, ich will eine graphische Darstellung der Nachführfehler, d.h. Zeit gegen GuideErrX und GuideErrY (also in 3 Spalten) aufgelistet haben. Also diese:
0.0000 -0.2319 5.5020
14.5550 -0.1007 5.0740
21.7900 -0.2349 5.5922
29.2100 -0.4169 6.3815
36.2350 -0.0118 6.1102
40.1450 0.2547 6.3337
47.1890 -0.0818 6.1038
54.5900 -0.3919 6.3097
61.9650 0.7112 6.5686
68.9250 0.0805 6.4893
....
Man kann jetzt einen Editor nehmen, oder man macht es so:
cut -d\| -s -f2,7,8 FS2Imager015.log | grep [0-9] | tr "|" " " >FS2-2-7-8.dat <cr>
gnuplot <cr>
-> pl "FS2-2-7-8.dat" w l , "FS2-2-7-8.dat" using 1:3 w l
Bild
Der Befehl cut schneidet Spalten (character) oder Felder aus der Datei FS2Imager015.log.
mal eintippen (Die Zeilen, die uns interessieren beginnen gleich mit einem Trennzeichen (|), weshalb ich Feld2 (-f2) als Option nehme.)
cut -f2 FS2Imager015.log
das sieht nicht gut aus.
cut nimmt standardmäßig ein tab-Zeichen als Trenner zwischen den Spalten an, wir haben aber in diesem Text ein |. Das kann ich dem Befehl mit auf den Weg geben.
cut -d| -f2 FS2Imager015.log
War noch nix. Es gibt die folgende Fehlermeldung
cut: Diese Option benötigt ein Argument -- »d«
„cut --help“ gibt weitere Informationen.
bash: -f2: command not found
klappt also nicht. Wir können es aber verstehen, weshalb es so nicht klappt. Wir wissen ja, daß das |-Zeichen von der Shell für die Erstellung einer Pipe benutz wird. Man muß es deshalb verstecken. Für ein einzelnes zeichen nimmt man dazu den Backslash, also:
cut -d\| -f2 FS2Imager015.log
Aha, geht doch! Die Zweite Spalte hat unsere gewünschte Zeit. Allerdings noch einigen anderen Schroot ebenfalls. Sieht man, wenn man
cut -d\| -f2 FS2Imager015.log | head -n30
eintippt. Uns interessieren ja nur Zahlen und zwar in den Feldern 2,7,8. Dann sollten wir die auch angeben.
cut -d\| -f2,7,8 FS2Imager015.log | head -n30
Vom Schrott befreien wir uns so:
cut -d\| -s -f2,7,8 FS2Imager015.log | head -n30
das -s gibt nur die Zeilen aus, die auch das Trennzeichen (|) enthalten.
Bleibt noch die erste Zeile und das Trennzeichen, die unsere tiefsten Empfindungen stören.
Elapsed Secs|GuideErrX |GuideErrY
0.0000| -0.2319| 5.5020
14.5550| -0.1007| 5.0740
21.7900| -0.2349| 5.5922
29.2100| -0.4169| 6.3815
36.2350| -0.0118| 6.1102
Da hilft ein weiteres Filter, das ich eigentlich heute besprechen wollte. Es kommt in fast jeder längeren Pipeline vor. Das grep, wir werden es morgen näher betrachten. grep [0-9] läßt nur noch die Zeichen 0-9 durch.
0.0000| -0.2319| 5.5020
14.5550| -0.1007| 5.0740
21.7900| -0.2349| 5.5922
29.2100| -0.4169| 6.3815
36.2350| -0.0118| 6.1102
40.1450| 0.2547| 6.3337
das Trennzeichen macht der Befehl tr platt. Wir übersetzen es nach Blank " " und schreiben das Ergebnis in die Datei FS2-2-7-8.dat.
Mit gnuplot kann man die Daten als Kurven malen. Da es nicht jeder installiert hat. Schicke ich ein Bild mit.
Hätte ich den Editor genommen, wäre ich schneller gewesen? Vielleicht. Aber! Ich hab in der Nacht 14 verschiedene Messreihen gemacht. Man kann die ausklamüserte Befehlsfolge in eine ausführbare Datei schreiben, und dann ...
Wer macht jetzt noch das Maul auf?
Unix, d.h. man muß eine ganze Menge lernen und man braucht Geduld. Ich hätte es lieber ein wenig mehr piano angehen lassen. Bis morgen.