外からawkに引数で値を渡してあげる方法として、2通りの方法があります。
今回は、その方法を紹介したいと思います。

スポンサーリンク

-vオプションでawkに値を渡す

-vオプションの使い方

例えば下記の形式で、awkの引数に設定することで、値を渡すことができます。
変数はawk内部で使う変数を設定することができます。

cat ファイル | awk -v 変数=値 ‘処理’

スポンサーリンク

-vオプションを使ったawkのサンプルコード

例えば、in.txtが下記のように書かれていたとします。

下記のように、-vオプションで3つの変数に値を設定し、awk内部に渡してあげます。

下記がサンプルコードになります。
1行ずつin.txtを読み込んで、それぞれの列の間に、引数で渡した文字列を挟んでprint出力しています。

実行すると、-vオプションの引数で渡してあげた、”年” “月” “日”の3つの文字列がawk内部に渡されていて、print出力されているのが確認できます。

スポンサーリンク

-vオプション”なし”でawkに値を渡す

-vオプション”なし”でawkに値を渡す方法

-vオプションなしで、awkに値を渡すには、awkのシングルコーテーションで囲った処理部分の後に、変数=値の形式で書くだけです。

※ただし、-vオプション”なし”でawkに値を渡す場合には、BEGINブロックでは値の参照が行われずに、メインブロック以降の処理で参照されることに注意が必要です。

cat ファイル | awk ‘処理’ 変数=値

awkのサンプルコード

サンプルコードになります。
先述のin.txtを読み込んで実行するサンプルコードです。
シングルコーテーションで囲った後に、3つの変数に値を設定しています。

実行すると、下記のようにprint出力されます。
ただし、BEGINブロックでのprint出力の行では、strYear , strMonth , strDayの3つの変数に空となっています。
BEGINブロックでは値が渡されていないのが確認できます。

-vオプション”あり”と”なし”の違いは?

-vオプション”あり”と”なし”の違いは、先述の動作確認でも確認できたと思いますが、

-vオプション”あり”の場合は、BEGINブロック実行時から値が渡される。
-vオプション”なし”の場合は、BEGINブロック実行時には値が渡されない。メインブロック以降で値が渡される。

-vオプション”あり”で使うようにしています。

もちろん用途によって使い分けるのも良いと思いますが、変数のスコープがわかりにくいとバグの原因になることもあると思いますので、個人的には-vオプションで統一するようにしています。

スポンサーリンク