[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RES: [shell-script] Duvida boba...
From: |
Julio Cezar Neves - DATAPREVRJ |
Subject: |
RES: [shell-script] Duvida boba... |
Date: |
Thu, 11 Aug 2005 12:29:06 -0300 |
Fala Tiago,
a falta de tempo está enorme, então vou colar um pedaço do meu livro que
fala sobre o tema para que vc o desenvolva.
[ ]s,
Julio
====================================================
Valores de vetores
Nesta seção, trataremos o uso de vetores ou arrays, já que o awk os provê da
utilização de vetores unidimensionais. Os vetores e seus elementos têm o
mesmo tratamento de variáveis, não necessitando portanto de serem
declarados, pois passarão a existir assim que lhes for atribuído um valor.
Exemplo: Se fizermos
$ awk '{ Registro [NR] = $0 }' carros NR=Variável que contém número do
registro
teremos em memória, dentro do vetor Registro, o conteúdo do arquivo carros,
indexado pelo seqüencial do registro.
Vamos aproveitar o exemplo anterior e fazer um programa para listar
te-lefones de trás para a frente:
$ cat tac.awk
awk '{
Registro [NR] = $0
}
END
{
for( i=NR; i>1; i-- ) print Registro [i]
}' telefones
Ao final da carga do vetor Registro, o programa faz um loop para listar cada
linha do vetor, a partir da última (NR) até a primeira. Vamos executá-lo:
$ tac.awk
Paula Duarte (011)449-0219
Ney Gerhardt (024)543-4321
Ney Garrafas (021)988-3398
Luiz Carlos (021)767-2124
Juliana Duarte (024)622-2876
Enio Cardoso (023)232-3423
Claudia Marcia (021)555-2112
Ciro Grippi (021)555-1234
Felizmente, o tratamento de vetores feito pelo awk, nos permite indexá-los
com valores não numéricos. Isto pode nos ser útil, quando necessitamos de
muito acesso randômico em um arquivo não muito grande (que possa residir com
folga na memória). Repare, no exemplo a seguir, que dois vetores foram
criados: um com todo o registro e outro com as velocidades. Em ambos, o
campo usado como subscrito foi o modelo.
$ cat indexauto.awk
awk '{
Registros [$1] = $0
Velocidades [$1] = $2 $1 = modelo e $2 a vel. máx.
}
END {
for (Modelo in Velocidades)
Print Modelo, "\t", Velocidades [Modelo] \t representa um <TAB>
}' carros
Se fosse o caso, este programa teria no vetor Registros todos os dados do
arquivo carros, disponibilizando-os para eventuais consultas randômi-cas.
Mas, aproveitamos o embalo e listamos os modelos e suas velocida-des, já que
também havíamos criado Velocidades. Veja só:
$ indexauto.awk
Parati 173
Palio 188
Corsa-Wagon 183
Corsa-4portas 182
Corsa-Sedan 182
Gol 175
Tipo 176
Corsa-3portas 150
Palio-Weekend 185
Esta é a forma de usar o for que eu havia dito que explicaria mais tarde.
Ele interage com todos os elementos de um vetor. Sua forma é:
For (indice in vetor) comando
E executa comando com a variável indice assumindo todos os valores dos
subscritos definidos para vetor.
Como você não conhece os modelos contidos em carros, caso quisesse saber
dados sobre o Clio, antes teria que perguntar sobre a sua existência no
vetor Registros, fazendo:
if (Registros ["Clio"] != "") ...
Ora, esta forma está correta, porém, como o Clio não está cadastrado,
teríamos como efeito colateral do if a criação de um elemento vazio no vetor
Registros, indexado de Clio. Esta mesma pergunta poderia ser fei-ta, sem
subprodutos indesejáveis, da seguinte forma:
if ("Clio" in Registros) ...
Esta é a forma que eu prefiro.
Uma outra forma muito eficiente de trabalhar com vetores é usando a fun-ção
interna split.
Para matar um elemento de um vetor, basta simplesmente fazermos:
delete vetor [indice]
Desta forma, o elemento indice de vetor seria apagado.
===========================================
| -----Mensagem original-----
| De: Tiago Peczenyj [mailto:address@hidden]
| Enviada em: quarta-feira, 10 de agosto de 2005 20:15
| Para: address@hidden
| Assunto: [shell-script] Duvida boba...
|
|
| Como eu posso contar quantas vezes aparece uma palavra em um texto ?
|
| O grep -c conta quantas linhas ele retorna, porém podem ocorrer mais
| de uma palavra por linha.
|
| Alguem ?
|
|
| ---------------------------------------------------------------------
| Esta lista não admite a abordagem de outras liguagens de
| programação, como perl, C etc. Quem insistir em não seguir
| esta regra será moderado sem prévio aviso.
| ---------------------------------------------------------------------
| Sair da lista: address@hidden
| ---------------------------------------------------------------------
| Esta lista é moderada de acordo com o previsto em
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Links do Yahoo! Grupos
- RES: [shell-script] Duvida boba...,
Julio Cezar Neves - DATAPREVRJ <=