または
Awkにbash変数を挿入しようとしています-
ログがあります-
$ cat > log
test1
test2
ahaha
hahah
私がやります
$ cat log | awk '$1~/test1|test2/ {print }'
test1
test2
大丈夫
awkにbash変数を貼り付ける必要があります
$ a=test1
$ b=test2
それから私は挿入しようとします
$ cat log | awk 'BEGIN{a;b} $1~/a|b/ {print }'
ahaha
hahah
$ cat log | awk -v a=test1 -v b=test2 '$1~/a|b/ {print }'
ahaha
hahah
すべてのパターンを文字列として作成し、引数としてawkで受け取る方法-
$ p='$1~/test1|test2/ {print }'
$ cat log | awk p
# get test1
# get test2
Awkは/.../
内の変数を展開しません。
だが
$ cat log | awk -v a=test1 -v b=test2 '$1 ~ a || $1 ~ b {print }'
そして
$ p='$1~/test1|test2/ {print }'
$ cat log | awk "$p"
動作するはずです(テストされていません)
パターンを変数としてawkに渡し、動的パターンを使用して明示的に比較します(つまり、文字列のパターンと照合します)...
awk -v pat="$a|$b" '$1 ~ pat' log
または
awk -v a="$a" -v b="$b" '$1 ~ a "|" b ' log
注:静的パターン/.../を使用することはできません(またはダーティクォート/エスケープを使用することによってのみ)。
Awkのスコープ外の変数を入力します( 'を閉じて再度開きます)。
cat log | awk '$1~/'${a}'|'${b}'/ {print }'