通过 system() 命令使 awk 使用 bash

通过 system() 命令使 awk 使用 bash

有没有办法让 awk 在使用调用运行系统命令时使用 bash 而不是 sh system()

我想使用一些 bash 特定的功能,例如 [[ ]] 和 < > 字符串比较运算符:

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

答案1

如果你想要 bash,你要么必须修补 gawk,要么直接调用 bash(引用有点毛茸茸的):

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

答案2

awk可以自己做这些事情:

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

它甚至可以处理正则表达式:

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

或者,以你的例子为例:

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

过去awk调用system()外部命令速度极慢,而且无法获取输出来自程序本身中任何可用形式的命令awk

相关内容