Hilfe beim Shellscripten mit awk
-
Also zuallererst folgendes:
Ich versuche die ausgabe vom gcc so zu verändern, dass aus den zeilennummern, die in doppelpunkten eingeschlossen sind, geklammerte werte werden, sodass VisualStudio die dateien samt zeile in der Fehlerliste anzeigen kann.In einer interaktiven shell kann ich zum Beispiel folgendes benutzen:
echo abc.c:12:8: error: Invalid bla | awk '{ print gensub(/:([[:digit:]]+):(|([[:digit:]]+):)/, "(\\1, \\3)", "g"); }was das format der ausgabe umwandelt.
Wenn ich nun aber dasselbe in einem shellscript versuche tut sich nichts:$CC -o stdafx.h.gch stdafx.h | awk '{ print gensub(/:([[:digit:]]+):(|([[:digit:]]+):)/, "(\\1, \\3)", "g"); }'Nun frage ich mich wo liegt der fehler?
Vielen dank für tatkräftige hilfe.
-
Vmtl. wird das nicht an die Standardausgabe sondern an cerr oä ausgegeben, Du pipest aber nur die Standardausgabe weiter.
-
genau das wars, und ließ sich mit einem 2>&1 vor dem pipe-operator beheben.
Danke
-
Jetzt hab ich ein neues problem: Ich versuch mithilfe von variablen diese lange zeile in meinem script zu vermeinden, das sieht in etwa so aus:
# AWK aufruf wird zerpflückt AWK="/bin/awk '{ print gensub(/:([[:digit:]]+):(|([[:digit:]]+):)/, \"(\\\\1, \\\\3)\", \"g\"); }'" $CC -o stdafx.h.gch stdafx.h 2>&1 | ${AWK} # AWK aufruf wird als eine datei, die nicht auffindbar ist interpretiert $CC -o stdafx.h.gch stdafx.h 2>&1 | "${AWK}"Nun ist meine frage, was ich machen muss, dass nach der expansion awk mit einem durchgängigen parameter dasteht?
-
jetzt habe ich das behelfsmäßig so gelöst:
AWK='{ print gensub(/:([[:digit:]]+):(|([[:digit:]]+):)/, "(\\1, \\3):", "g"); }' $CC -o stdafx.h.gch stdafx.h 2>&1 | awk "${AWK}"falls jemand weiß, wie es besser geht bin ich für antworten dankbar.