Lassen Sie awk Bash mit dem Befehl system() verwenden

Lassen Sie awk Bash mit dem Befehl system() verwenden

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

awkkann 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

awkDer Aufruf system()eines externen Befehls ist extrem langsam und macht es zudem unmöglich,Ausgabevon diesem Befehl in einer nutzbaren Form im awkProgramm selbst.

verwandte Informationen