Próbuję abuse asort()
(właśnie dlatego), aby skopiować tablicę src
do tablicy dest
, nie ma problemu:asort (src, dest) do tablicy wielowymiarowej
$ awk 'BEGIN {
split("first;second;third",src,";") # make src array for testing
asort(src, dest, "@ind_num_asc") # copy array to dest
for(i in dest)
print i, src[i], dest[i] # output
}'
1 first first
2 second second
3 third third
Ale czy istnieje sposób użycie tablica wielowymiarowa jako macierz dest
? Coś jak:
asort(src, dest[src[1]], "@ind_num_asc") # or dest[src[1]][]
(dawny produkuje second argument not an array
, ostatni syntax error
W rzeczywistości pierwszy argument split
jest $0
i próbuję zapisów grupowych).
Oczywiście mógłbym użyć for
pętlę ale mój mózg utknął w testowaniu tego rozwiązania.
Najśmieszniejsze jest to, że jeśli zdefiniować tablicę wcześniej z 'dest [„pierwszy”] [1] =„”' to wtedy daje „fatal: spróbuj użyć tablicy "dest [" pierwszy "]" w kontekście skalarnym ". Ciekawe, aby przeczytać ostatnią część [GNU awk na tablicy macierzy] (https://www.gnu.org/software/gawk/manual/html_node/Arrays-of-Arrays.html): _Reklamować odniesienie do niezainicjowanego element array daje wartość "", łańcuch pusty. Ma to jedną ważną implikację, gdy zamierzasz użyć pod-kolumny jako argumentu dla funkcji. – fedorqui
Tak, naprawdę nie jest niezgodny w odniesieniu do tego przykładu i 'asort'. Grałem z 'split'ting na' dest ["tmp"] ', ale' asort' nadal nie jest zbyt chętny. –
Funkcje "asort()" i "split()" są spójne i zachowują się dokładnie [jako dokument] (https://www.gnu.org/software/gawk/manual/gawk.html#Arrays-of-Arrays), nie wiem skąd pochodzi nieporozumienie/zamieszanie. –