制御構文     Last modified: Jan 19, 2015

 アクションを書くに当たって,アクションの実行順序などを決めるための構文がいくつかある。


if

 実行される部分が 1 行の場合でも,全体を { } で囲む方がよい


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
 whiledo-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 の全要素を削除する
}


・ 直前のページへ戻る  ・ E-mail to Shigenobu AOKI