12.7 Traversing Arrays of Arrays
Arrays of Arrays, described how gawk
provides arrays of arrays. In particular, any element of
an array may be either a scalar, or another array. The
isarray()
function (see section Getting Type Information)
lets you distinguish an array
from a scalar.
The following function, walk_array()
, recursively traverses
an array, printing each element’s indices and value.
You call it with the array and a string representing the name
of the array:
| 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])
}
}
|
It works by looping over each element of the array. If any given
element is itself an array, the function calls itself recursively,
passing the subarray and a new string representing the current index.
Otherwise, the function simply prints the element’s name, index, and value.
Here is a main program to demonstrate:
| BEGIN {
a[1] = 1
a[2][1] = 21
a[2][2] = 22
a[3] = 3
a[4][1][1] = 411
a[4][2] = 42
walk_array(a, "a")
}
|
When run, the program produces the following output:
| $ gawk -f walk_array.awk
-| a[4][1][1] = 411
-| a[4][2] = 42
-| a[1] = 1
-| a[2][1] = 21
-| a[2][2] = 22
-| a[3] = 3
|