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

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

とにかく早く問題解決したい人はこちら>>直接、論文相談

関連記事

awk 行の表示 先頭行 最終行 指定行
awkは、テキスト処理に欠かせません。よく使う「行を指定した処理」に使える定型スクリプトをまとめました。簡単に書けるように、省略できる部分は極力省きました。とにかく早く問題解決したい人はこちら>>直接、データ解析相談awk...
awk 置換や部分文字列などの文字列処理 gsub sub match index split 等
awkの文字列関数について、置換や部分文字列処理など、よく使う代表的なものを簡単なサンプルを使って紹介します。とにかく早く問題解決したい人はこちら>>直接、データ解析相談awk 置換文字列置換 gsub sub...
awk 複数行の処理
ファイルには様々な形式があります。1行単位で記述されたCSV(カンマ区切り)ファイルやTSV(タブ区切り)ファイルは、awkやsed、その他のbashコマンドなどを使っても比較的処理がしやすい。しかし、複数行でレコードが構成される場合(1...
awk split | サンプルでわかる列の分割とセパレータ指定方法
awkのsplit関数は、セパレータを指定して文字列を分割することができます。セパレータには文字や正規表現で指定できて、指定しない場合はフィールドセパレータがデリミタとして使われます。分割後の単語は、配列に格納されて1〜分割数nまでのインデ
awk while・do 繰り返し処理
awkの繰り返し処理(for・while・do)についてまとめます。今回は、while・doについて。とにかく早く問題解決したい人はこちら>>直接、データ解析相談awk while 繰り返し処理条件を満たせば「ずっ...
404 NOT FOUND | バイオインフォ 道場 [bioinfo-Dojo]
awk 配列 使い方
awkでは、他のプログラミング言語のように配列を使うことができます。配列の簡単な使い方のまとめです。とにかく早く問題解決したい人はこちら>>直接、データ解析相談awk 連想配列awkの配列では、インデックスには文字...
awk よく使うシステム変数と使い方
awkのスクリプトでは、参照や設定が可能な「特殊な変数(システム変数)」を使うことができます。とにかく早く問題解決したい人はこちら>>直接、データ解析相談よく使うシステム変数awkのスクリプトでシステム変数を使うと...
awk パターンとアクション
awkは、入力行に対してフィルタリングなどの処理を行う際によく用いられます。入力行に対して「どの行に処理を行うか」を指定するのがパターン、「どんな処理を行うか」を指定するのが「アクション」です。とにかく早く問題解決したい人はこちら...
awk 区切り文字とフィールド
awkは、入力の各行を区切り文字でフィールドに分割して、それぞれを個別に取り出すことができます。とにかく早く問題解決したい人はこちら>>直接、データ解析相談awk 区切り文字の変更入力行をフィールドに分割するのは区...
awk コマンドラインでの実行とスクリプトファイルでの実行
awkを実行する場合、コマンドラインで指定する方法と、スクリプトファイルを指定する方法があります。とにかく早く問題解決したい人はこちら>>直接、データ解析相談awk コマンドラインで指定するpatternとacti...
awk 使い方 フィールド取り出し スクリプトの書き方
awkで簡単なフィールドデータの取り出しを行います。awk は入力された行について、空白やタブで区切られたデータをフィールドと解釈します。・…を指定することで、各行のフィールドを取り出すことができます。尚、https://bioinfo-dojo.net/2016/02/18/awk_easy_field_filter/は入力行全体です。s...
正規表現 メタキャラクタ 検索・置換 前編
sed や awk、grep、その他のプログラム処理で文字列を扱うときに、よく用いられる「正規表現」についてまとめます。とにかく早く問題解決したい人はこちら>>直接、データ解析相談正規表現とは正規表現とは、文字列集...
正規表現 メタキャラクタ 検索・置換 後編
sed や awk、grep、その他のプログラム処理で文字列を扱うときに、よく用いられる「正規表現」についてまとめます。とにかく早く問題解決したい人はこちら>>直接、データ解析相談正規表現とは正規表現とは、文字列集...

コメント

  1. […] for 繰り返し処理 | バイオインフォ道場 […]

タイトルとURLをコピーしました