Faça o awk usar o bash com o comando system()

Faça o awk usar o bash com o comando system()

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

awkpode 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 awkpara system()chamar um comando externo é extremamente lento e também torna impossível obtersaídadesse comando em qualquer forma utilizável no awkpróprio programa.

informação relacionada