mawk (e nawk ) fornecem apenas arrays multidimensionais sintetizados .
gawk fornece (desde 4.0, thx manatwork ) matrizes multidimensionais verdadeiras, embora a página de manual (IMHO) desvie um pouco: imediatamente após a introdução de (corrigido desde a v4.1.1!). if ((i,j) in array) , segue com " A construção in também pode ser usada em um loop for para iterar todos os elementos de uma matriz. "
Mas, for ((i,j) in array) não é o caminho para iterar sobre estes, o gawk way é (como você usou originalmente):
for (i in array)
for (j in array[i])
print array[i][j]
Com nawk / mawk você está preso a matrizes multidimensionais sintetizadas ,
for (ij in A) {
split(ij,xx,SUBSEP);
printf("A[%s,%s]=%s\n",xx[1],xx[2],A[ij])
}
Agora, seu próximo problema será ordenar , os índices de matriz são implicitamente do tipo string e os arrays são implicitamente desordenados. A menos que você tenha um conhecimento separado dos índices, como seria o caso de uma matriz simples não esparsa com índices inteiros consecutivos de 0..N. gawk oferece uma solução para um in ordenado .
Se você conhece os índices de um array sintetizado, pode usar A[i,j] (que é tratado como A[i SUBSEP j] ) ou for / in e alguma divisão de strings para reconstruir a lista de i e j , ou if ((i,j) in A) (teste de presença, sem autovivificação de índices).
Em gawk você não pode usar (i,j) in arr onde arr é um verdadeiro array multidimensional, você precisa dividi-lo em duas (ou quantas dimensões) for loops como acima. Para estar completamente correto, porém, o (s) laço (s) interno (s) deve conter uma condição isarray() , já que não é necessário que cada elemento de arr[i] seja um array, o gawk está feliz em permitir escalares também.
Não conheço nenhuma documentação específica de mawk além da página de manual , que pretende ser uma nova implementação padrão de awk (ou seja, nawk ) (portanto, não há matrizes multidimensionais verdadeiras, nenhuma classificação de índice e nenhum isarray() ).