Auch wenn dies eine wirklich alte Frage mit vielen Antworten ist, können Sie es ohne die Verwendung externer Tools wie sed
oder awk
tun (und daher plattformunabhängig). Sie können es "einfach" mit gnuplot machen (auch mit der Version zum Zeitpunkt der Frage des OP: gnuplot 4.4.0, März 2010).
Es ist jedoch aus Ihren Beispieldaten und Ihrer Beschreibung nicht klar, ob der interessante Wert
- streng in der 12. Spalte steht oder
- immer in der letzten Spalte steht oder
- in einer beliebigen Spalte stehen kann, jedoch immer von pts gefolgt wird
Für alle 3 Fälle gibt es nur mit gnuplot (und daher plattformunabhängig) Lösungen. Die Annahme ist, dass der Spalten-Trenner ein Leerzeichen ist.
ad 1. Die einfachste Lösung: mit u 1:12
ignoriert gnuplot einfach nicht-numerische und Spaltenwerte, z.B. wird 45pts
als 45
interpretiert.
ad 2. und 3. Wenn Sie die letzte Spalte als Zeichenfolge extrahieren, wird gnuplot fehlschlagen und stoppen, wenn Sie einen nicht-numerischen Wert über real()
in eine Gleitkommazahl umwandeln möchten. Daher müssen Sie selbst über Ihre eigene Funktion isNumber()
testen, ob der Spaltenwert zumindest mit einer Nummer beginnt und daher durch real()
konvertiert werden kann. Falls die Zeichenfolge keine Zahl ist, könnten Sie den Wert auf 1/0
oder NaN
\=4.6.0) könnten Sie den Wert auf NaN
set datafile missing NaN vermeiden, das jedoch in gnuplot 4.4 nicht verfügbar ist. Außerdem wird in gnuplot 4.4 NaN
einfach auf 0.0
gesetzt (GPVAL_NAN = 0.0
). Sie können dies mit diesem "Trick" umgehen, der auch unten verwendet wird.
Daten: SO7353702.dat
2010/01/12/ 12:00 einige irrelevante Alapha 129495 und der interessante Wert 45pts
2010/01/12/ 15:00 einige irrelevante Alapha 129495 und kein interessanter Wert
2010/01/13/ 09:00 einige irrelevante Alapha 345678 und der interessante Wert 60pts
2010/01/15/ 09:00 einige irrelevante Alapha 345678 62pts und nichts
2010/01/17/ 09:00 einige irrelevante Alapha 345678 und nichts
2010/01/18/ 09:00 einige irrelevante Alapha 345678 und der interessante Wert 70.5pts
2010/01/19/ 09:00 einige irrelevante Alapha 345678 und der interessante Wert extra extra 64pts
2010/01/20/ 09:00 einige irrelevante Alapha 345678 und der interessante Wert 0.66e2pts
Skript: (funktioniert für gnuplot>=4.4.0, März 2010)
### Zahlen ohne externe Tools extrahieren
reset
DATEI = "SO7353702.dat"
set xdata time
set timefmt "%Y/%m/%d/ %H:%M"
set format x "%b %d"
isNumber(s) = strstrt('+-.',s[1:1])>0 && strstrt('0123456789',s[2:2])>0 \
|| strstrt('0123456789',s[1:1])>0
# Version 1:
plot DATEI u 1:12 w lp pt 7 ti "Wert in der 12. Spalte"
pause -1
# Version 2:
set datafile separator "\t"
getLastValue(col) = (s=word(strcol(col),words(strcol(col))), \
isNumber(s) ? (t0=t1, real(s)) : (y0))
plot t0=NaN DATEI u (t1=timecolumn(1), y0=getLastValue(1), t0) : (y0) w lp pt 7 \
ti "Wert in der letzten Spalte"
pause -1
# Version 3:
getPts(s) = (c=strstrt(s,"pts"), c>0 ? (r=s[1:c-1], p=word(r,words(r)), isNumber(p) ? \
(t0=t1, real(p)) : y0) : y0)
plot t0=NaN DATEI u (t1=timecolumn(1),y0=getPts(strcol(1)),t0):(y0) w lp pt 7 \
ti "Wert überall mit 'pts' am Ende"
### Ende des Skripts
Ergebnis:
Version 1:
Version 2:
Version 3: