つれづれ電脳記(日くらしPCに向かひて)

つれづれなるままに、日くらしPCに向かひて、その悪戦苦闘ぶりをそこはかとなく書き付くるおじさん。たまに雑談[管理人:goosyun]

つれづれなるままに、日くらしPCに向かひて、デジタル関係の悪戦苦闘ぶりをそこはかとなく書き付くるおじさんです。
たまに雑談してます。連絡・問い合わせフォームは、ページ最下部に置いています。[著者(運営人):goosyun]

(当ブログには本文中に広告リンクが含まれています。)

プログラミング言語AWKで変数を使ったパターンマッチ

 


1 変数によるパターンマッチ

 先日、プログラミング言語AWKにおける、変数を使ったパターンマッチングを記事にしました。
  ⇒ 2026年1月28日付け記事「AWKのパターンに変数を使用シェルスクリプトの引数として指定した文字列でデータ検索)」をご覧ください。
 その記事は長文になったため、今回、その結論部分を抜き出して短い記事にまとめました。自分自身の記憶にしっかり定着させるためです。

ノートPCでプログラミング

2 結論(スラッシュの要否)

 AWK正規表現マッチングには、大きく分けて2つの方法があります。
 (1)リテラル(固定文字)による正規表現
    /パターン/ のようにスラッシュで囲って直接パターンを記述する方法です。 
   例:$3 ~ /hoge/ ・・・第3フィールドに「hoge」という文字列が含まれていればマッチ
 (2)変数による正規表現
    awkの変数に正規表現パターンを格納し、その変数を使ってマッチングする方法です。
    例:$3 ~ pattern ・・・第3フィールドに変数「pattern」に代入された文字列が含まれていればマッチ
 上記のように、パターンに変数を使う場合、スラッシュで囲まずに変数名のみを記述する必要があります。これが結論で、大事な点です。

3 なぜ?・・・の理屈

 正規表現パターンにおいて、文字列をスラッシュで囲むと、スラッシュ内の文字列はリテラル(固定文字)として扱われます。スラッシュ内に変数名を記述したとしても、変数として扱ってもらえず、変数展開は行われません。
 スラッシュで囲まずに変数名のみを記述すれば、通常どおり変数展開が行われます。

4 具体例

 具体的には、次のとおりです。
 【誤】 $ echo hogefuga | awk -v hensu="hoge" '$0 ~ /hensu/' 
 【正】 $ echo hogefuga | awk -v hensu="hoge" '$0 ~ hensu'
 上記の【誤】においては、実行の結果は何も表示されないのに対し、【正】では想定どおりの動作をして、hogehugaと表示されます。
 【誤】の書き方では、「hensu」というリテラル文字との照合が行われるから、マッチしません。

5 補足(おまけ)

 (1) awkプログラム内での変数呼び出しでは、「$」は付けない。
 (2) 「'$0 ~ hensu'」の部分は、単に「'hensu'」の省略記述も可。

 

 それではまた次の記事で。
    goosyun