Hallo Allerseits,
ich habe folgende Zeilen:
1 2 3 4 5 6 | black_start:0.00 black_end:0.20 black_start:1.50 black_end:1.70 black_start:20.30 black_end:20.40 black_start:50.11 black_end:50.21 black_start:70.45 black_end:70.55 black_start:100.10 black_end:100.20 |
Dort möchte ich den ersten Zahlenwert der Letzten Zeilen (erste Spalte) nehmen, 30 abziehen, die vorherigen Zeilen prüfen, und wenn der Wert das letzte mal unter dem Vergleichswert (70.1) ist möchte ich diesen Angezeigt bekommen.
Also als Ergebniss müsste hier 50.11 raus kommen.
Eine Lösung habe ich schon, die wäre über drei Schritte und würde so funktionieren:
1 2 3 4 5 6 7 8 9 10 | black=$( echo "black_start:0.00 black_end:0.20 black_start:1.50 black_end:1.70 black_start:20.30 black_end:20.40 black_start:50.11 black_end:50.21 black_start:70.45 black_end:70.55 black_start:100.10 black_end:100.20" | awk -v FS="( black_start:| black_end )" '{ print $2 }' ) last=$( echo "$black" | awk 'END { print $0-30 }' ) match=$( echo "$black" | awk -v ma="$last" '{ if ( $0 < ma ) ne=$0 } END { print ne }' ) |
Als Einzeiler habe ich das getestet, was jedoch noch nicht ganz funktioniert:
1 2 3 4 5 6 | echo "black_start:0.00 black_end:0.20 black_start:1.50 black_end:1.70 black_start:20.30 black_end:20.40 black_start:50.11 black_end:50.21 black_start:70.45 black_end:70.55 black_start:100.10 black_end:100.20" | awk -F'[: ]' '{ a[i++] = $2 } END { for (j=i-1; j>=0;) print a[j--] }' |
Leider komme ich hier nicht weiter und wollte euch mal fragen ob ihr mir hier ein Tipp habt. Bei diesen Ansatz bekomme ich das als Ergebnis:
20.30
0.00
Schön wäre, wenn ich auch wieder -v FS="( black_start:| black_end )"
verwenden könnte, und nicht nur -F'[: ]'
. Das hat im realen Szenario besser geklappt.
Grüße
Jonathan