No, the syntax
for(index1 in arr2) for(index2 in arr2) {
print arr2[index1][index2];
}
won't work. Awk doesn't truly support multi-dimensional arrays. What it does, if you do something like
x[1,2] = 5;
is to concatenate the two indexes (1 & 2) to make a string, separated by the value of the SUBSEP
variable. If this is equal to "*", then you'd have the same effect as
x["1*2"] = 5;
The default value of SUBSEP
is a non-printing character, corresponding to Ctrl+\. You can see this with the following script:
BEGIN {
x[1,2]=5;
x[2,4]=7;
for (ix in x) {
print ix;
}
}
Running this gives:
% awk -f scriptfile | cat -v
1^\2
2^\4
So, in answer to your question - how to iterate a multi-dimensional array - just use a single for(a in b)
loop, but you may need some extra work to split up a
into its x
and y
parts.