awkで配列操作をする時のfor文の書き方は主に2通りの方法があります。
書き方をよく忘れるので備忘録。
スポンサーリンク
サンプルコード
※awkの使い方をまとめて一覧にしました。
参考:awk入門-使い方まとめ一覧-
参考:awk入門-使い方まとめ一覧-
まずはサンプルコードです。in.txtを一行ずつ読み込んで、1フィールド(列)目を配列arrに順に詰めていきます。
その後、ENDブロックで、2種類のfor文の書き方で、配列arrの要素を全てprint出力しています。
$ cat in.txt e f g h i $ cat sample.awk #!/bin/sh cat in.txt | awk ' BEGIN{ i = 0 } { arr[ i ] = $1 i++ } END{ print "インデックスをインクリメントとし、配列の要素を順に出力" for (i = 0; i < length(arr); i++ ) { printf "%s," , arr[ i ] } print "" print "for in 形式の処理で、全ての配列の要素を出力" for ( i in arr ) { printf "%s," , arr[ i ] } } ' $ ./sample.awk インデックスをインクリメントとし、配列の要素を順に出力 e,f,g,h,i, for in 形式の処理で、全ての配列の要素を出力 g,h,i,e,f,
スポンサーリンク
for文でインデックスをインクリメントして配列操作をする
awkの配列は連想配列となっていますが、インデックスに数字を設定することで、下記のようにfor文で順に配列操作をすることができます。length()は、awkの標準関数で、引数に配列を設定するとその配列の要素数を返します。
下記のように、インデックス0からインクリメントして、その配列の要素数だけprint出力しています。
print "インデックスをインクリメントとし、配列の要素を順に出力" for (i = 0; i < length(arr); i++ ) { printf "%s," , arr[ i ] }
for(インデックス in 配列){}形式で全ての配列操作をする
もう一つの配列操作の方法として、下記のようにfor(インデックス in 配列){}形式で配列処理ができます。
ただし、配列の処理順は規則性があるわけではなく、下記のprint出力の順番もソートされているわけではありません。
awkの連想配列の使い方の例を下記の記事で書いています。
参考:awkの連想配列で特定の列の文字列の出現回数をカウント
print "for in 形式の処理で、全ての配列の要素を出力" for ( i in arr ) { printf "%s," , arr[ i ] }
スポンサーリンク