awkの配列の初期化には、split()関数を使うと便利です。

スポンサーリンク

awkのsplit関数の使い方

※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

スポンサーリンク