今回は、awkコマンドで実行される処理ブロックと変数の初期化を実行するブロックについてご紹介したいと思います。

スポンサーリンク

awkで実行されるブロック処理の構文

※awkの使い方をまとめて一覧にしました。
参考:awk入門-使い方まとめ一覧-

awkの処理は大きく分けて、下記の3つのブロックの単位で処理を書くことができます。
1. BEGINブロック
2. メインブロック
3. ENDブロック

下記の形式が基本的な構文の書き方になります。

cat ファイル名 | awk '		
	BEGIN{
		〜BEGINブロックの処理〜
	}
	{
		〜メインブロックの処理〜
	}
	END{
		〜ENDブロックの処理〜
	}
'

スポンサーリンク

awkで実行されるブロック処理の順番

awkのブロック処理の順番としては、構文の名前の通り、下記の順番で実行されます。

1. BEGINブロック
2. メインブロック
3. ENDブロック

※それぞれの処理のブロックは省略することもできます。

最初に実行されるBEGINブロックで変数の初期化を行うのが基本

まず最初に、awkコマンドを実行すると、BEGINブロックの処理が実行されます。
基本は、最初に実行されるBEGINブロックで変数の処理を実行すると良いかと思います。

基本的にはBEGINブロックで変数を初期化するとしておけば、ソースコードもわかりやすくなり混乱することもなくなり、バグの防止にもつながると思います。

awkのサンプルコード

下記のように、in.txtがあるとします。in.txtの2列目の総和を求めるawkのスクリプトをサンプルコードとしてご紹介します。

 $ cat in.txt 
line1 4
line2 8
line3 9

下記がサンプルコードになります。

 $ cat sample.awk 
#!/bin/sh
cat in.txt | awk '		
	BEGIN{
		print "BEGINブロックの処理を実行"
		print "  変数の初期化"
		sum = 0
	}
	{
		print NR "行目を実行"
		sum += $2
	}
	END{
		print "ENDブロックの処理を実行"
		print "  2列目の総和=" sum
	}
'
 

下記が実行結果になります。BEGINブロック→メインブロック→ENDブロックの順番で実行されるているのが確認できます。
 $ ./sample.awk 
BEGINブロックの処理を実行
  変数の初期化
1行目を実行
2行目を実行
3行目を実行
ENDブロックの処理を実行
  2列目の総和=21

スポンサーリンク

awkのサンプルコードの解説

簡単にサンプルコードの解説をしたいと思います。

まずは、BEGINブロックで変数sumに0を代入して初期化をしています。

	BEGIN{
		print "BEGINブロックの処理を実行"
		print "  変数の初期化"
		sum = 0
	}

続いて、メインブロックでは、変数sumに2列目を加算していきます。

	{
		print NR "行目を実行"
		sum += $2
	}

最後に、ENDブロックで総和をprint出力しています。
	END{
		print "ENDブロックの処理を実行"
		print "  2列目の総和=" sum
	}

スポンサーリンク