awk の配列は連想配列

awkの多次元配列の添字を見て書いていますが、awk の配列は配列ではなく連想配列 (ハッシュとか辞書とか言われているもの) です。 したがって、数字に見えても添字は全て文字列扱いになります。 例えば、以下のようなプログラムを実行してみます。

#! /usr/bin/gawk -f
# test_array.awk

BEGIN {
    arr[0, 11] = "arr11";
    print arr[0, 11];
    print arr[0, 11 + 0];
    print arr[0, "11"];
    print arr[0, 1 1];
    print arr[0, "1" "1"];
}

以下のように全ての場合で同じ配列を参照していることが分かります。

$ gawk -f test_array.awk
arr11
arr11
arr11
arr11
arr11

つまり文字列としての扱いですから、空白は全て連接になります。 具体的に配列の中がどうなっているか見る場合には以下のようにします。

#! /usr/bin/gawk -f
# test_array2.awk

BEGIN {
    arr[0, 11] = "arr11";
    for (i in arr) {
        print i;
    }
}

実行してみます。

$ gawk -f test_array2.awk
011

あれ? awk の多次元配列をつなぐ SUBSEP (8 進数で \034) が消えています (端末によっては見えるかもしれません)。 いえいえ、そんなことはありません。

$ gawk -f test_array2.awk | od -b
0000000 060 034 061 061 012
0000005     ~~~

ちゃんと SUBSEP で区切られて表示されています。 大きく言えば SUBSEP (多次元配列のカンマ) も含めて全て文字列の連接と考えると良いかもしれません。

tag_nawk.pngtag_nawk.pngtag_nawk.pngtag_nawk.png