Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

awkの正規表現でSHELL変数は使えない……わけではない

使えないと思ったら使えました
shuzo-kino.hateblo.jp

awk正規表現で変数は使えません。
match関数という便利な子がいるので、それを使いましょう。

古い情報

既にSHELL変数を設定しているとします

$ echo $SHELL_VAR
12

これを参照しないなら話は簡単。ハードコードで終了。

$ echo "12 hoge fuga" | awk '($1 ~ /^12/) { print "アルヨ〜"}'
アルヨ〜

ところが、BEGIN節で変数をキャッチし正規表現中で使おうとすると……駄目です

$ echo "12 hoge fuga" | awk 'BEGIN { var="'"$SHELL_VAR"'" }  ($1 ~ /^var/) { print "アルヨ〜"}'

意図通り動かすにはmatch関数を利用します

echo "12 hoge fuga" | awk 'BEGIN { var="'"$SHELL_VAR"'" }  (match($1, "^" var)) { print "アルヨ〜"}'
アルヨ〜