%20%E6%8C%87%E4%BB%A4%E4%BD%BF%20awk%20%E4%BD%BF%E7%94%A8%20bash.png)
有沒有辦法讓 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
。