%20%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%20awk%20%E3%81%AB%20bash%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%95%E3%81%9B%E3%82%8B.png)
呼び出しを使用してシステム コマンドを実行するときに、awk で sh ではなく bash を使用するようにする方法はありますか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
。