sorting - asort(src,dest) to a multidimensional array -


i'm trying abuse asort() (just because) copy array src array dest, no problem there:

$ awk 'begin {     split("first;second;third",src,";") # make src array testing     asort(src, dest, "@ind_num_asc")    # copy array dest     for(i in dest)          print i, src[i], dest[i]        # output }' 1 first first 2 second second 3 third third 

but there way use multidimensional array dest array? like:

asort(src, dest[src[1]], "@ind_num_asc") # or dest[src[1]][]

(former produces second argument not array, latter syntax error in reality first argument of split $0 , i'm trying group records.)

of course use for loop brain stuck on testing solution.

you need create array under dest[src[1]] first gawk knows dest[src[1]] array of arrays rather default array of strings:

$ cat tst.awk begin {     split("first;second;third",src,/;/) # make src array testing      asort(src, dest1d)              # copy array dest1d     for(i in dest1d)         print i, src[i], dest1d[i]      # output     print ""      dest2d[src[1]][1]     asort(src, dest2d[src[1]])          # copy array dest2d     for(i in dest2d)         (j in dest2d[i])             print i, j, dest2d[i][j]    # output }  $ gawk -f tst.awk 1 first first 2 second second 3 third third  first 1 first first 2 second first 3 third 

it doesn't matter index give initial sub-array it'll deleted asort(). see last example under https://www.gnu.org/software/gawk/manual/gawk.html#arrays-of-arrays:

recall reference uninitialized array element yields value of "", null string. has 1 important implication when intend use subarray argument function, illustrated following example:

$ gawk 'begin { split("a b c d", b[1]); print b[1][1] }' error→ gawk: cmd. line:1: fatal: split: second argument not array 

the way work around first force b[1] array creating arbitrary index:

$ gawk 'begin { b[1][1] = ""; split("a b c d", b[1]); print b[1][1] }' -| 

Comments