#. arrays of arrays dynamically generate;
# 配列の配列を動的に生成する手法を検討する
#. Action;
{
aformat();
array_entry(foo, _arexp, _value);
}
#. END;
END {
PROCINFO["sorted_in"] = "@ind_num_asc";
print_array(foo, "foo");
}
#. aformat();表の多次元配列のインデックス群と値を中間処理
function aformat( i) {
_arexp = "";
_value = $NF;
if (NF == 1) print "line:" NR " inappropriate input";
else if (NF == 0);
else {
for (i = 1; i < NF - 1; i++) _arexp = _arexp $(i) "-";
_arexp = _arexp $(NF - 1);
}
}
#. array_entry();動的に多次元配列を作成する
function array_entry(a, arexp, value, step) {
if (!step) {
_dim = 0;
delete _tmp;
_dim = split(arexp, _tmp, /-/);
if (!_dim) return 1; #scalar or null skip
if (_dim == 1) { a[arexp] = value; return 0; }
}
if (step == _dim - 2) {
a[_tmp[_dim - 1]][_tmp[_dim]] = value;
return 0;
}
a[_tmp[step + 1]]["dummy"];
array_entry(a[_tmp[step + 1]], "", value, step + 1);
delete a[_tmp[step + 1]]["dummy"];
}
#. print_array();多次元配列の内容をすべて書き出す
function print_array(a, an, e, i) {
for (i in a)
if (isarray(a[i])) print_array(a[i], an, (e "[" i "]"));
else print an (e "[" i "] = ") a[i];
}
Iy4JYXJyYXlzIG9mIGFycmF5cyBkeW5hbWljYWxseSBnZW5lcmF0ZTsKIwnphY3liJfjga7phY3liJfjgpLli5XnmoTjgavnlJ/miJDjgZnjgovmiYvms5XjgpLmpJzoqI7jgZnjgosKIy4JQWN0aW9uOwp7CglhZm9ybWF0KCk7CglhcnJheV9lbnRyeShmb28sIF9hcmV4cCwgX3ZhbHVlKTsKfQojLglFTkQ7CkVORCB7CglQUk9DSU5GT1sic29ydGVkX2luIl0gPSAiQGluZF9udW1fYXNjIjsKCXByaW50X2FycmF5KGZvbywgImZvbyIpOwp9CiMuCWFmb3JtYXQoKTvooajjga7lpJrmrKHlhYPphY3liJfjga7jgqTjg7Pjg4fjg4Pjgq/jgrnnvqTjgajlgKTjgpLkuK3plpPlh6bnkIYKZnVuY3Rpb24gYWZvcm1hdCggICAgaSkgewoJX2FyZXhwID0gIiI7CglfdmFsdWUgPSAkTkY7CglpZiAoTkYgPT0gMSkgcHJpbnQgImxpbmU6IiBOUiAiIGluYXBwcm9wcmlhdGUgaW5wdXQiOwoJZWxzZSBpZiAoTkYgPT0gMCk7CgllbHNlIHsKCQlmb3IgKGkgPSAxOyBpIDwgTkYgLSAxOyBpKyspIF9hcmV4cCA9IF9hcmV4cCAkKGkpICItIjsKCQlfYXJleHAgPSBfYXJleHAgJChORiAtIDEpOwoJfQp9CiMuCWFycmF5X2VudHJ5KCk75YuV55qE44Gr5aSa5qyh5YWD6YWN5YiX44KS5L2c5oiQ44GZ44KLCmZ1bmN0aW9uIGFycmF5X2VudHJ5KGEsIGFyZXhwLCB2YWx1ZSwgICAgc3RlcCkgewoJaWYgKCFzdGVwKSB7CgkJX2RpbSA9IDA7CgkJZGVsZXRlIF90bXA7CgkJX2RpbSA9IHNwbGl0KGFyZXhwLCBfdG1wLCAvLS8pOwoJCWlmICghX2RpbSkgcmV0dXJuIDE7ICAgICAgICAjc2NhbGFyIG9yIG51bGwgc2tpcAoJCWlmIChfZGltID09IDEpIHsgYVthcmV4cF0gPSB2YWx1ZTsgcmV0dXJuIDA7IH0KCX0KCWlmIChzdGVwID09IF9kaW0gLSAyKSB7IAoJCWFbX3RtcFtfZGltIC0gMV1dW190bXBbX2RpbV1dID0gdmFsdWU7CgkJcmV0dXJuIDA7Cgl9CglhW190bXBbc3RlcCArIDFdXVsiZHVtbXkiXTsKCWFycmF5X2VudHJ5KGFbX3RtcFtzdGVwICsgMV1dLCAiIiwgdmFsdWUsIHN0ZXAgKyAxKTsKCWRlbGV0ZSBhW190bXBbc3RlcCArIDFdXVsiZHVtbXkiXTsKfQojLglwcmludF9hcnJheSgpO+WkmuasoeWFg+mFjeWIl+OBruWGheWuueOCkuOBmeOBueOBpuabuOOBjeWHuuOBmQpmdW5jdGlvbiBwcmludF9hcnJheShhLCBhbiwgICAgZSwgaSkgewoJZm9yIChpIGluIGEpCgkJaWYgKGlzYXJyYXkoYVtpXSkpIHByaW50X2FycmF5KGFbaV0sIGFuLCAoZSAiWyIgaSAiXSIpKTsKCQllbHNlIHByaW50IGFuIChlICJbIiBpICJdID0gIikgYVtpXTsgCn0K