awk for | サンプルでわかる、基本的な繰返し・変則的な繰返し

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条件文は、カウンタ変数を使って処理を繰り返したいときに使う。
  • カウンタ変数の初期値・終了条件・変化量の式で繰り返しを制御する。
  • カウンタ変数の条件を工夫すると、インクリメント・デクリメント・変わった繰り返しにも対応できる。

実験データの解析や論文用グラフ作成のヒントになりそうな、プログラミング・統計処理の参考になる書籍をまとめて紹介しています。是非、参考にしてみて下さいね。