awkのfor文は、カウンタを目印にして処理を繰り返したいときによく使われます。for文では、カウンタの初期値・終了条件・変化式の3つの式が必要です。変化式を工夫して、インクリメントやデクリメントを使いわけたり、変わった繰り返しにも対応できます。

awk for 書き方
awkのfor文は、カウンタ変数をデータのインデックス番号と対応させて、順番に処理を繰り返すのに便利です。配列の先頭から最後まで同じ処理を繰り返したり、タブ区切りの行を1列ずつ処理する場合によく使います。
書式
awkの繰り返しの条件文は、for キーワードの直後に3つの式で書きます。それぞれの条件はセミコロン(;)で区切ります。
- カウンタ変数の初期化
- 変数の終了条件チェック
- 変数の変化
その後に、繰り返しの処理を書きます。繰り返しの文が単純なら1行で書けますが、複数行になるなら中括弧({})でくくります。処理の区切りにもセミコロン(;)を置きます。
for ( 変数の初期化; 変数の終了条件チェック; 変数の変化 ) { 繰り返し処理 }
カウンタ変数の使い方
awkのforでは、変数「i」や変数「j」といったカウンタ変数をよく使います。カウンターは初期値から始まり、終了条件に到達するまで変化式に従ってカウントアップ/カウントダウンします。カウンターが終了条件を満たしたら繰り返しが終了します。
awkでは列のインデックス番号として使われることが多いので、「初期値1」「列の最後のインデックス番号(NF)まで」「1ずつカウントアップ」という3つの条件で定義されることが多いです。
例では、1列目から順番に改行して表示します。
$ cat > test.txt << EOF a b c EOF $ cat test.txt | awk '{for (i=1; i<=NF; i++) printf("%s\n", $i)}' a b c
よく使う繰返し・変わった繰り返し
awkのfor文では、カウンタ変数の初期値・終了条件・変化量の式を工夫すると、インクリメントやデクリメントを使いわけたり、変わった繰り返しにも対応できます。
インクリメント
「初期値1」「列の最後のインデックス番号(NF)まで」「1ずつカウントアップ」という3つの条件で定義して、1列目から順番に改行して表示します。
$ cat > test.txt << EOF a b c EOF $ cat test.txt | awk '{for (i=1; i<=NF; i++) printf("%s\n", $i)}' a b c
デクリメント
「列の最後のインデックス番号(NF)」「1列目まで」「1ずつカウントダウン」という3つの条件で定義して、最後の列から逆順に改行して表示します。
$ cat > test.txt << EOF
a b c
EOF
$ cat test.txt | awk '{for (i=NF; i>=1; i--) printf("%s\n", $i)}'
c
b
a
変わった繰り返し – 奇数のみ
「初期値1」「列の最後のインデックス番号(NF)まで」「2ずつカウントアップ」という3つの条件で定義して、1列目から順番に奇数のみ表示します。
$ cat > test.txt << EOF
a b c
EOF
$ cat test.txt | awk '{for (i=1; i<=NF; i=i+2) printf("%s\n", $i)}'
a
c
まとめ
- awkのfor条件文は、カウンタ変数を使って処理を繰り返したいときに使う。
- カウンタ変数の初期値・終了条件・変化量の式で繰り返しを制御する。
- カウンタ変数の条件を工夫すると、インクリメント・デクリメント・変わった繰り返しにも対応できる。
実験データの解析や論文用グラフ作成のヒントになりそうな、プログラミング・統計処理の参考になる書籍をまとめて紹介しています。是非、参考にしてみて下さいね。

関連記事














コメント
[…] for 繰り返し処理 | バイオインフォ道場 […]