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

[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





reply via email to

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