awkの配列の初期化には、split()関数を使うと便利です。
スポンサーリンク
awkのsplit関数の使い方
※awkの使い方をまとめて一覧にしました。
参考:awk入門-使い方まとめ一覧-
参考:awk入門-使い方まとめ一覧-
※MACターミナル(BSD系)での動作確認です。
awkのsplit関数は下記の形式で書くことができ、split対象文字列を区切り文字で分割して、分割結果を配列に格納します。
split(split対象文字列, 配列, 区切り文字)
例えば、"push pop shift"をスペース" "区切りで分割して、配列arrayに格納するには、下記のように書きます。
split( "push pop shift" , array, " " )
終了処理(配列の削除)にはdeleteが使えます。
参考:awkで配列自体を削除する場合もdeleteでOK
メモリの消費が気になるときに使えますね。
スポンサーリンク
サンプルコード(splitで格納した配列をforループ処理)
サンプルコードです。
前述した通りですが、"push pop shift"をスペース" "区切りで分割して、配列arrayに格納します。
そして、配列arrayの全ての要素をforループ処理してprint出力します。
$ cat sample.awk #!/bin/sh cat in.txt | awk ' BEGIN{ split( "push pop shift" , array, " " ) for( i in array ) { printf "array[%s]=%s " , i , array[ i ] } } '
実行すると、下記のようになり、splitの結果がそれぞれ配列に格納されているのがわかると思います。
$ ./sample.awk array[2]=pop array[3]=shift array[1]=push
区切り文字を正規表現で複数指定してsplitする
区切り文字をを正規表現で指定してsplitを使うこともできます。
例えば、":"と"+"の両方の文字を区切り文字を設定したい場合は、
区切り文字を正規表現で、/[:+]/ と指定します。
下記がサンプルコードになります。
$ cat sample2.awk #!/bin/sh cat in.txt | awk ' BEGIN{ split( "push:pop+shift" , array, /[:+]/ ) for( i in array ) { printf "array[%s]=%s " , i , array[ i ] } } '
下記が実行結果になります。
$ ./sample2.awk array[1]=push array[2]=pop array[3]=shift
スポンサーリンク
splitで分割した最後の要素を取得
splitで分割した最後の要素を取得するには、splitで格納した配列の最後の要素にアクセスします。
splitの戻り値が、splitで分割した要素数として返るので、これを利用します。
splitの戻り値をindexとして、splitで格納した配列の最後の要素にアクセスすればOKです。
下記がサンプルコードになります。
$ cat sample3.awk #!/bin/sh cat in.txt | awk ' BEGIN{ i = split( "push:pop+shift" , array, /[:+]/ ) print "splitした要素数=" i print "splitで格納した配列の最後の要素=" array[i] } ' $ ./sample3.awk
下記が実行結果になります。
splitした要素数=3 splitで格納した配列の最後の要素=shift
スポンサーリンク