Em primeiro lugar, for (i in array)
in awk
produz o índice da matriz, não os elementos da matriz. Então você obteve o resultado como se tivesse acessado $1
. $2
... $NF
.
echo 'The quick brown fox jumped over the lazy dog.' | \
awk '{
split($0, WORDS, " ");
for ( WORD in WORDS ) {
print WORD;
}
}'
2
3
4
5
6
7
8
9
1
Você pode ver que tem índices de matriz ao acessar a variável WORD
.
Para sua pergunta, o POSIX definiu o looping por awk
array, produzindo o índice de matriz em pedido não especificado :
for (variable in array)
which shall iterate, assigning each index of array to variable in an unspecified order.
Portanto, cabe à implementação definir como percorrer a matriz.
Um teste rápido no meu sistema mostrou que gawk
e mawk
estão em loop com ordem crescente:
for AWK in gawk mawk /usr/5bin/[on]awk /usr/5bin/posix/awk; do
printf '==%s==\n' "$AWK"
echo 'The quick brown fox jumped over the lazy dog.' |
"$AWK" '{
split($0, WORDS, " ")
for (WORD in WORDS) {
print WORD;
}
}' | { sed 1q; tail -n1 }
done
==awk==
1
9
==mawk==
1
9
==/usr/5bin/nawk==
2
1
==/usr/5bin/oawk==
2
1
==/usr/5bin/posix/awk==
2
1
(Com GNU sed
, você precisa de sed -u 1q
)