Haga que awk use bash con el comando system()

Haga que awk use bash con el comando system()

¿Hay alguna manera de hacer que awk use bash en lugar de sh cuando ejecuta comandos del sistema usando la system()llamada?

Quiero usar algunas características específicas de bash, como los operadores de comparación de cadenas [[ ]] y < >:

gawk 'BEGIN {system("if [[ \"porc\" == \"porc\" ]]; then echo yes; else echo no; fi")}'
sh: [[: not found

Respuesta1

Si quieres bash, tendrás que parchear gawk o llamar a bash directamente (las citas se vuelven un poco complicadas):

gawk 'BEGIN {
    script="if [[ \"porc\" == \"porc\" ]]; then echo yes; else echo no; fi"
    system("bash -c '\''" script "'\''")
}'

Respuesta2

awkPuede hacer estas cosas por sí solo:

$ awk 'BEGIN { if ("A" < "B") print "A < B"; else print "A >= B" }'
A < B

Incluso maneja expresiones regulares:

$ awk 'BEGIN { if ("thing" ~ "^t") print "t-something"; else print "not t-something" }'
t-something

O, para tomar su ejemplo:

$ awk 'BEGIN { if ("porc" == "porc") print "yes"; else print "no" }'
yes

Usar awkpara system()llamar a un comando externo es extremadamente lento y también hace imposible obtenerproducciónde ese comando en cualquier forma utilizable en el awkprograma mismo.

información relacionada