Hoi Marian,
du stellst blöde Aufgaben... Ich hab das jetzt die letzten 2 Stunden getestet und auch mal mit einfacheren Ausdrücken. Ich komme immer zum gleichen Fehlerbild, das \1 funktioniert entweder garnicht, oder (für mich) nicht nachvollziehbar:
$ echo "1b2 " | gawk '{print gensub(/(.+)[[:space:]]+/,"\1","g")"__"}' 1b2 __
Ich hab auch mal diverse andere Möglichkeiten für den regex getestet und bin am Ende auf folgendes gekommen, was auf jeden Fall (in anderen Sprachen) matched:
(.{1,6})[[:space:]]*$
Wenn ich mir deine Aufgabe so anschaue, dann wäre vielleicht folgendes für dich ein Behelf:
$ echo -n " abs123456 " | gawk '{gsub(/[[:space:]]*/,"",$0); print substr($0,length($0)-5,length($0))"__"}' 123456__
Allerdings kenne ich ja hier die genauen Strings nicht, und vor allem weiß ich nicht, ob da eventuell davor noch irgendwo Leerzeichen kommen. Dazu muss ich sagen, das ich in awk nicht so fit bin, wie es vielleicht nötig wäre. Daher bin ich gespannt, ob andere noch ne Lösung (oder zumindest ne Erklärung) finden.
Und im Zweifelsfall: Lern endlich mal ne richtige Programmiersprache :p
Grüße,
Danilo
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256
Hoi Marian,
ich hab zwar Deine Mail gestern schon gesehen, hatte aber keinen Nerv wie Danilo 2 Stunden zu experimentieren. Ich hab grad mal Deinen Code ausprobiert und bei mir funktioniert der einwandfrei, selbst mit Deinem Beispiel. Daher die Frage: welche Version setzt Du ein? Ich hab aktuell GNU Awk 4.1.3.
Damit kommt mit Deinem Code folgendes Ergebnis: echo "WXG73H23wZ " | ./test.awk " WXG73H23wZ "
(die Leerzeichen liegen an der Kommata-Trennung der Variablen, weil ich zwingend ein Hochkomma bei der Ausgabe haben wollte).
Gruß Martin
Am 22.07.2015 um 22:00 schrieb DaniloE:
Hoi Marian,
du stellst blöde Aufgaben... Ich hab das jetzt die letzten 2 Stunden getestet und auch mal mit einfacheren Ausdrücken. Ich komme immer zum gleichen Fehlerbild, das \1 funktioniert entweder garnicht, oder (für mich) nicht nachvollziehbar:
$ echo "1b2 " | gawk '{print gensub(/(.+)[[:space:]]+/,"\1","g")"__"}' 1b2 __
Ich hab auch mal diverse andere Möglichkeiten für den regex getestet und bin am Ende auf folgendes gekommen, was auf jeden Fall (in anderen Sprachen) matched:
(.{1,6})[[:space:]]*$
Wenn ich mir deine Aufgabe so anschaue, dann wäre vielleicht folgendes für dich ein Behelf:
$ echo -n " abs123456 " | gawk '{gsub(/[[:space:]]*/,"",$0); print substr($0,length($0)-5,length($0))"__"}' 123456__
Allerdings kenne ich ja hier die genauen Strings nicht, und vor allem weiß ich nicht, ob da eventuell davor noch irgendwo Leerzeichen kommen. Dazu muss ich sagen, das ich in awk nicht so fit bin, wie es vielleicht nötig wäre. Daher bin ich gespannt, ob andere noch ne Lösung (oder zumindest ne Erklärung) finden.
Und im Zweifelsfall: Lern endlich mal ne richtige Programmiersprache :p
Grüße,
Danilo
_______________________________________________ Lug-dd maillist - Lug-dd@mailman.schlittermann.de https://ssl.schlittermann.de/mailman/listinfo/lug-dd
lug-dd@mailman.schlittermann.de