![awkにbash変数を挿入する方法は? [コピー]](https://linux33.com/image/61043/awk%E3%81%ABbash%E5%A4%89%E6%95%B0%E3%82%92%E6%8C%BF%E5%85%A5%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%AF%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
- awkにbash変数を挿入するにはどうすればよいですか?(たとえば、いくつかのforループでこれを行う必要があります。検索します。Bash変数とは異なるモードまったく)
または
- 簡単に作成する方法を探す全体パターン(文字列)これをawkのパラメータとして受け取ります。
awkにbash変数を挿入してみてください -
ログが少しあります -
$ cat > log
test1
test2
ahaha
hahah
はい
$ cat log | awk '$1~/test1|test2/ {print }'
test1
test2
すべてが大丈夫です。
bash変数をawkに貼り付ける必要があります。
$ 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
答え1
パターンをawkに変数として渡し、動的パターンを使用して明示的に比較します(つまり、文字列のパターンと一致)。
awk -v pat="$a|$b" '$1 ~ pat' log
または
awk -v a="$a" -v b="$b" '$1 ~ a "|" b ' log
注:静的モード/ ... /(またはダーティ引用符/エスケープのみ)は使用できません。
答え2
awkは内部変数を拡張しません/.../
。
しかし、
$ cat log | awk -v a=test1 -v b=test2 '$1 ~ a || $1 ~ b {print }'
そして
$ p='$1~/test1|test2/ {print }'
$ cat log | awk "$p"
動作する必要があります(テストされていません)