アクションを書くに当たって,アクションの実行順序などを決めるための構文がいくつかある。
if 文
例
if (x % 2 == 0) { print "偶数" } else { print "奇数" }
while 文
while (条件) 条件が真の場合に繰り返し実行される
例
count = 0 while (count < 10) { print count # 0 〜 9 が表示される count++ }
do-while 文
上の while と似た制御を行うが,「繰り返し部分」は少なくとも 1 回は実行される。その後,「条件」が評価され,条件が真ならば繰り返し部分が実行されるが,条件が偽ならば繰り返しは終了する。
do { 繰り返し部分 } while (条件)
例
count = 0 do { print count # 0 〜 9 が表示される count++ } while (count < 10)
for 文
while や do-while は,初期化と条件と状態の変更で繰り返しを実現している。for 文は,以下の様に,初期化と条件と状態の変更で繰り返しを 1 つの文で定義する。
for (初期化; 条件; 状態の変更) { 繰り返し部分 }
例
for (i = 0; i < 10; i++) { print i # 0 〜 9 が表示される }for 文にはもう 1 つの形式がある。「配列」の全要素の添え字に対して繰り返し処理を行う。変数は各要素を表す。
for (添え字変数 in 配列) { 繰り返し部分 }
例
{ names[NR] = $0 } END { for (x in names) { if (names[x] ~ /ignore/) print names[x] } }
break 文
if 文と組み合わせて,for, while, do-while ループから脱出する。
例
for (i = 0; i++) { if (i > 5) break print i # 0 〜 4 が表示される }
continue 文
if 文と組み合わせて,for, while, do-while ループの中で,次のサイクルを始める。
例
for (i = 0; i < 10; i++) { if (i % 2 == 0) continue print i # 0, 2, 4, 6, 8 だけが表示される }
next 文
AWK 以外のプログラム言語では 上の continue 文に相当するのが next 文であるが,AWK では「現在のレコードの処理を中断し,次のレコードの処理に移る」ことを命令する。
next file 文
「現在のファイルの処理を中断し,次のファイルの処理に移る」ことを命令する。
exit 文
全ての処理が中断され,END パターンがある場合はそれが実行される。
delete 文
配列中の任意の要素を削除する。
delete 配列[添字]
例(応用)
for (i in array) { delete array[i] # array の全要素を削除する }