shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Awk e Arrays Associativos.


From: Tiago Barcellos Peczenyj
Subject: Awk e Arrays Associativos.
Date: Wed, 31 Oct 2007 13:38:21 -0200

Um grande problema para quem trabalha com arrays associativos no AWK é
com relação a ordem dos elementos quando esta fazendo uma iteração.

Ex:
$ gawk 'BEGIN{ split("5 4 2 1 3",T) ; for(i in T) print T[i]}'
1
3
5
4
2

Eu inseri, nessa ordem, 5, depois 4, depois 2... porém o acesso aos
elementos de um array em um for do tipo

for( variavel in array)

é imprevisive / incontrolável.

Agora vejamos isto:

$ WHINY_USERS=1 gawk 'BEGIN{ split("5 4 2 1 3",T) ; for(i in T) print T[i]}'
5
4
2
1
3

WOW! Através da variavel de ambiente do unix WHINY_USERS agora eu
consigo acessar os elementos na ordem em que eles foram inseridos no
array!

E para acessar os valores na ordem crescente:
$ WHINY_USERS=1  gawk 'BEGIN{ split("5 4 2 1 3",T)
  asort(T) ;  for(i in T) print T[i] }'
1
2
3
4
5

A variavel de ambiente WHINY_USERS *não* esta documentada no man,
muito menos na documentação que consegui a respeito do gawk. Descobri
esta dica no comp.lang.awk e, por incrivel que pareça, tive que
vasculhar o codigo fonte do gawk (graças a deus podemos fazer isso)
para entender melhor o que essa variavel poderia fazer (alem disso).

Enfim, fica a dica

-- 
Tiago B Peczenyj
Linux User #405772

http://peczenyj.blogspot.com/


reply via email to

[Prev in Thread] Current Thread [Next in Thread]