Índices para arrays awk podem ser numéricos (como em uma matriz tradicional) ou strings (uma matriz associativa). Então você pode fazer
animal[1] = "cat"
ou
animal["one"] = cat
No entanto, se você fizer
animal[one] = cat
o awk tentará encontrar uma variável chamada 'one', falhar e efetivamente fazer isso:
animal[""] = cat
Então, no seu programa, todos os três animais são atribuídos a animal[""]
, então você acaba com apenas um elemento em sua matriz.
Se você colocar one
, two
e three
entre aspas, seu código funcionará conforme o esperado.