system() コマンドで awk に bash を使用させる

system() コマンドで awk に bash を使用させる

呼び出しを使用してシステム コマンドを実行するときに、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

関連情報