awkにおける多次元配列
awkでは、他言語でよく見かける多次元配列という機能が実装されていません。しかし、一次元配列を工夫すれば、多次元配列として利用することができます。
その方法とは、引数にカンマ区切りで値を複数格納させます。例えば、x[y, z]だと、引数にyとzをとる二次元配列として使えます。
入力データ例
001 1 yamada
002 3 suzuki
003 5 tanaka
コード例
awk '{
names[$1, $2] = $3;
}
END {
for (i in names) {
print i, names[i];
}
}' test.txt
ENDの部分で格納した配列をすべて表示させる処理を行っています。
出力結果
0023 suzuki
0011 yamada
0035 tanaka
特定の要素を取得
仕組みとしては、添え字が文字列に変換され、間にセパレータをはさみ一次元配列の引数として解釈されます。
したがって、特定の要素を取得する場合の例は次のようになります。
awk '{
names[$1, $2] = $3;
}
END {
print names["002", "3"];
}' test.txt
この結果、suzukiが出力されます。
ちなみに、文字列間をつなぐセパレータとは、デフォルトで"\034"と決められており、先ほどの例だと、names["002\0343"]という形でアクセスしてもsuzukiという要素が取得できます。
以上、awkで擬似的に多次元配列を使う方法でした。ここでは、二次元配列のみ紹介しましたが、2より大きな次元の配列になっても話は同じです。