awk for 繰り返し処理 簡単なサンプルでわかる インクリメント・デクリメント、変わった繰り返し

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

awk for 処理を繰り返す

awkのfor文は、カウンタ変数をデータのインデックス番号と対応させて、順番に処理を繰り返すのに便利です。配列の先頭から最後まで同じ処理を繰り返したり、タブ区切りの行を1列ずつ処理する場合によく使います。

書式

awkの繰り返しの条件文は、for キーワードの直後に3つの式で書きます。それぞれの条件はセミコロン(;)で区切ります。

  • カウンタ変数の初期化
  • 変数の終了条件チェック
  • 変数の変化

その後に、繰り返しの処理を書きます。繰り返しの文が単純なら1行で書けますが、複数行になるなら中括弧({})でくくります。処理の区切りにもセミコロン(;)を置きます。

for ( 変数の初期化; 変数の終了条件チェック; 変数の変化 ) {
  繰り返し処理
}

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

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



ピックアップ記事

  1. awk split サンプルでわかる列の分割とセパレータ(文字・正規表現)の指定方法

    awkのsplit関数は、セパレータを指定して文字列を分割することができます。セパレータには文字や…
  2. R 使い方 グラフの色 自作のカラーパレットとデフォルトのカラーパレット

    グラフを描画する際、色の組み合わせを1つ1つ考えるのは面倒ですよね。Rには、あらかじめ色の組み合わ…
  3. R subset関数 データフレームやmatrixからの条件指定による行・列の抽出

    R の subset関数は、データフレームやマトリックスから条件にマッチした部分集合を取り出します…

人気記事

  1. R データ型 - 文字列・ベクター・データフレーム・マトリックス など-, R言語, スクリプト

    R subset関数 データフレームやmatrixからの条件指定による行・列の抽出
    R の subset関数は、データフレームやマトリックスか…
  2. IGV, 解析ツール

    IGV 使い方 インストール〜便利な使い方まで | リファレンス・マッピングデータ・アノテーションを読み込んで表示しよう
    IGV(Integrative Genomics View…
  3. Excel, その他, 統計

    z-score 計算方法 エクセル(Excel) 編
    統計処理で、大きく変化しているなどの判断基準にも使われる値…

おすすめ記事

  1. awk, bash 文字列操作, シェルスクリプト

    bash 部分文字列・置換・長さ・連結・分割の文字列処理
    bashのよく使う文字列処理、部分文字列・置換・連結・長さ…
  2. bash 応用, シェルスクリプト

    シェル スクリプト ファイル存在チェック・空のファイルチェック
    bashでスクリプトを作成するときに、よく使うのがファイル…
  3. R言語, グラフ

    R 使い方 軸・ラベルの調整(向き・サイズ・色など) グラフの描き方
    Rによるplot(グラフ)の描画は、手軽で大変便利です。た…