Gibt es eine Möglichkeit, awk dazu zu bringen, beim Ausführen von Systembefehlen mit dem Aufruf Bash statt Sh zu verwenden system()
?
Ich möchte einige Bash-spezifische Funktionen wie die Zeichenfolgenvergleichsoperatoren [[ ]] und < > verwenden:
gawk 'BEGIN {system("if [[ \"porc\" == \"porc\" ]]; then echo yes; else echo no; fi")}'
sh: [[: not found
Antwort1
Wenn Sie Bash möchten, müssen Sie entweder Gawk patchen oder Bash direkt aufrufen (das Zitieren ist etwas haarig):
gawk 'BEGIN {
script="if [[ \"porc\" == \"porc\" ]]; then echo yes; else echo no; fi"
system("bash -c '\''" script "'\''")
}'
Antwort2
awk
kann diese Dinge selbst erledigen:
$ awk 'BEGIN { if ("A" < "B") print "A < B"; else print "A >= B" }'
A < B
Es verarbeitet sogar reguläre Ausdrücke:
$ awk 'BEGIN { if ("thing" ~ "^t") print "t-something"; else print "not t-something" }'
t-something
Oder um Ihr Beispiel zu nehmen:
$ awk 'BEGIN { if ("porc" == "porc") print "yes"; else print "no" }'
yes
awk
Der Aufruf system()
eines externen Befehls ist extrem langsam und macht es zudem unmöglich,Ausgabevon diesem Befehl in einer nutzbaren Form im awk
Programm selbst.