Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

awkの正規表現で変数は使えない

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 "アルヨ〜"}'
アルヨ〜