awk for 繰り返し処理

バイオインフォ道場、くまぞうです。

awkの繰り返し処理(forwhiledo)についてまとめます。今回は、forについて。

スポンサーリンク



awk for 繰り返し処理

「10回繰り返し」のように(回数に注目した)繰り返しを行います。繰り返しの条件を変数で指定します。「最初は1、2、3・・・10まで」というように繰り返し用の変数の数をカウントアップすることで指定回数分処理を繰り返します。尚、カウントダウンや2個ずつ増やすなどして、変数の変化値を調整することができます。

書式

for (変数 初期値; 終了条件; 変数変化) {
    処理
}

関連記事
awk while・do 繰り返し処理

awk for 繰り返し処理 書き方

フィルター処理で良く使われるのは、フィールドの出力処理です。正順・逆順・奇数のみの出力を例として紹介します。

awk for 正順

データファイル(awk_for1.dat)の1行毎の各フィールドを先頭から1つずつ最後の項目(NFシステム変数はフィールド数を意味します。)まで表示して改行します。コメント行以外の全てに対して行います。

$ cat awk_for1.dat
# comment
1a 1b 1c 1d 1e
2a 2b 2c 2d 2e
3a 3b 3c 3d 3e
awk_for1.awk
!/^#/{
    for (i=1; i<=NF; i++) printf("%s ", $i)
    printf("\n")
}
$ awk -f awk_for1.awk awk_for1.dat 
1a 1b 1c 1d 1e 
2a 2b 2c 2d 2e 
3a 3b 3c 3d 3e 

awk for 逆順

各フィールドを末尾から1つずつ表示して改行します。コメント行以外の全てに対して行います。

$ cat awk_for1.dat
# comment
1a 1b 1c 1d 1e
2a 2b 2c 2d 2e
3a 3b 3c 3d 3e
awk_for2.awk
!/^#/{
    for (i=NF; i>=1; i--) printf("%s ", $i)
    printf("\n")
}
$ awk -f awk_for2.awk awk_for1.dat 
1e 1d 1c 1b 1a 
2e 2d 2c 2b 2a 
3e 3d 3c 3b 3a 

awk for とびとび・奇数のみ

各フィールドを先頭から1つとびで表示して改行します。コメント行以外の全てに対して行います。

$ cat awk_for1.dat
# comment
1a 1b 1c 1d 1e
2a 2b 2c 2d 2e
3a 3b 3c 3d 3e
awk_for3.awk
!/^#/{
    for (i=1; i<=NF; i=i+2) printf("%s ", $i)
    printf("\n")
}
$ awk -f awk_for3.awk awk_for1.dat 
1a 1c 1e 
2a 2c 2e 
3a 3c 3e 

awk for 繰り返し処理 配列用

配列の要素を扱う場合もforを使います。(詳しい使い方は、こちら! awk 配列 使い方

書式

for (変数 in 配列) {
    array[変数(インデックス)]
}

awk for 配列へのアクセス 例

BEGIN {
    array[0] = "array_0"
    array[1] = "array_1"

    array["A"] = "array_A"
    array["B"] = "array_B"

    for (i in array) {
	print array[i]
    }
}

関連記事
awk 区切り文字とフィールド
awk よく使うシステム変数と使い方
awk パターンとアクション

スポンサーリンク



2 thoughts to “awk for 繰り返し処理”

コメントは受け付けていません。