Existe uma maneira de fazer o awk usar bash em vez de sh ao executar comandos do sistema usando a system()
chamada?
Quero usar alguns recursos específicos do bash, como operadores de comparação de strings [[]] e <>:
gawk 'BEGIN {system("if [[ \"porc\" == \"porc\" ]]; then echo yes; else echo no; fi")}'
sh: [[: not found
Responder1
Se você quiser o bash, terá que corrigir o gawk ou chamar o bash diretamente (a citação fica um pouco complicada):
gawk 'BEGIN {
script="if [[ \"porc\" == \"porc\" ]]; then echo yes; else echo no; fi"
system("bash -c '\''" script "'\''")
}'
Responder2
awk
pode fazer essas coisas sozinho:
$ awk 'BEGIN { if ("A" < "B") print "A < B"; else print "A >= B" }'
A < B
Ele ainda lida com expressões regulares:
$ awk 'BEGIN { if ("thing" ~ "^t") print "t-something"; else print "not t-something" }'
t-something
Ou, para tomar o seu exemplo:
$ awk 'BEGIN { if ("porc" == "porc") print "yes"; else print "no" }'
yes
Usar awk
para system()
chamar um comando externo é extremamente lento e também torna impossível obtersaídadesse comando em qualquer forma utilizável no awk
próprio programa.