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:
Чтобы проверить, существует ли конкретная последовательность индексов в многомерном массиве, используйте тот же оператор (in), который используется для одномерных массивов. Запишите всю последовательность индексов в круглых скобках, разделенных запятыми, как левый операнд:
(subscript1, subscript2, ...) in array
Gawk 4 добавляет массивы массивов. Из этой ссылки:
for (i in array) {
if (isarray(array[i])) {
for (j in array[i]) {
print array[i][j]
}
}
else
print array[i]
}
Также см. Обход массивов массивов для получения информации о следующая функция, которая обходит массив массивов произвольного размера, в том числе зубчатые:
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])
}
}
person
Dennis Williamson
schedule
17.06.2010
gawk
начиная с версии 4 поддерживает массивы как элементы, то есть вложенные массивы, более гибкие, чем многомерные массивы,for (i in arr2) for (j in arr2[i]) print arr2[i][j]
, см. ответ JJoao - person jthill   schedule 07.03.2017