AWK 通过将索引与 SUBSEP 变量 (0x1c) 中保存的字符连接起来来伪造多维数组。您可以像这样使用split 遍历二维数组(基于info gawk 文件中的示例):
awk 'BEGIN { OFS=","; array[1,2]=3; array[2,3]=5; array[3,4]=8;
for (comb in array) {split(comb,sep,SUBSEP);
print sep[1], sep[2], array[sep[1],sep[2]]}}'
输出:
2,3,5
3,4,8
1,2,3
但是,您可以使用嵌套的 for 循环遍历数字索引数组:
for (i = 1; i <= width; i++)
for (j = 1; j < = height; j++)
print array[i, j]
来自GAWK manual 的另一个值得注意的信息:
要测试特定索引序列是否存在于多维数组中,请使用与单维数组相同的运算符 (in)。将整个索引序列写在括号中,用逗号分隔,作为左操作数:
(subscript1, subscript2, ...) in array
Gawk 4 添加了arrays of arrays。从那个链接:
for (i in array) {
if (isarray(array[i])) {
for (j in array[i]) {
print array[i][j]
}
}
else
print array[i]
}
另请参阅Traversing Arrays of Arrays,了解有关以下函数的信息,该函数遍历任意维度的数组数组,包括锯齿状数组:
function walk_array(arr, name, i)
{
for (i in arr) {
if (isarray(arr[i]))
walk_array(arr[i], (name "[" i "]"))
else
printf("%s[%s] = %s\n", name, i, arr[i])
}
}