gawk: Multiscanning

 
 8.5.1 Scanning Multidimensional Arrays
 --------------------------------------
 
 There is no special 'for' statement for scanning a "multidimensional"
 array.  There cannot be one, because, in truth, 'awk' does not have
 multidimensional arrays or elements--there is only a multidimensional
 _way of accessing_ an array.
 
    However, if your program has an array that is always accessed as
 multidimensional, you can get the effect of scanning it by combining the
 scanning 'for' statement (SeeScanning an Array) with the built-in
 'split()' function (SeeString Functions).  It works in the
 following manner:
 
      for (combined in array) {
          split(combined, separate, SUBSEP)
          ...
      }
 
 This sets the variable 'combined' to each concatenated combined index in
 the array, and splits it into the individual indices by breaking it
 apart where the value of 'SUBSEP' appears.  The individual indices then
 become the elements of the array 'separate'.
 
    Thus, if a value is previously stored in 'array[1, "foo"]', then an
 element with index '"1\034foo"' exists in 'array'.  (Recall that the
 default value of 'SUBSEP' is the character with code 034.)  Sooner or
 later, the 'for' statement finds that index and does an iteration with
 the variable 'combined' set to '"1\034foo"'.  Then the 'split()'
 function is called as follows:
 
      split("1\034foo", separate, "\034")
 
 The result is to set 'separate[1]' to '"1"' and 'separate[2]' to
 '"foo"'.  Presto!  The original sequence of separate indices is
 recovered.