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

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

Re: [shell-script] Obtendo variáveis a partir do log


From: Tiago Barcellos Peczenyj
Subject: Re: [shell-script] Obtendo variáveis a partir do log
Date: Wed, 6 Dec 2006 12:31:36 -0200

Sim, é um problema, que pode ser resolvido de muitas formas.

Uma delas é não usar variaveis do shell, usar awk, por exemplo

~> cat log # uma linha do seu arquivo de log
UPDATE banco.tabela SET campo1 = 10, campo2 = 20, campo3 = 30

~> sed '/SET/ s/.*SET//g' log # remover a parte que não interessa
campo1 = 10, campo2 = 20, campo3 = 30

~> sed '/SET/ s/.*SET//g' log | tr -d ' ' # remover espaços em branco 'inuteis'
campo1=10,campo2=20,campo3=30

~> sed '/SET/ s/.*SET//g' log | tr -d ' ' | awk -F= -v RS=\, '{print $1,$2}'
campo1 10
campo2 20
campo3 30

aqui eu usei o separador de campos como sendo '=' e o separador de
registros como sendo virgula.
~> sed '/SET/ s/.*SET//g' log | tr -d ' ' | awk -F= -v RS=\, '{array[$1]=$2}
END{ for(i in array) print i,array[i]}'
campo1 10
campo2 20
campo3 30

o que eu fiz? criei um array associativo cuja chave é o nome do campo
e cujo valor é o valor deste campo.

De repente o problema que vc tem não se resolve assim, pois vc tem
varias linhas e tal. Fica dificil de visualisar o que vc quer. Uma
outra abordagem seria a seguinte:

~> sed '/SET/ s/.*SET//g' log | tr -d ' ' | awk '{split($0,array,",");
for(i in array) {
       split(array[i],par,"=");
       variaveis[par[1]]=par[2]}
}
END{
  for(i in variaveis)
      print i,variaveis[i]
}'
campo1 10
campo2 20
campo3 30

Agora basta vc coordenar o que vc quer com as variaveis obtidas nesse log ;-)

On 12/6/06, Victor Leonardo <address@hidden> wrote:
Obrigado pela dica Tiago! Mas não haveria uma forma de definir essas
variáveis com um único comando?

Pelo que entendi, para cada variável que eu quisesse definir, eu teria
que repetir o comando 'cat log' para definir uma das variáveis, e
repetir o comando para todas as outras que eu quisesse setar.

Se o arquivo for grande, isso pode levar muito tempo. Será que não
haveria uma outra forma de fazer isso?


Em Qua, 2006-12-06 às 10:39 -0200, Tiago Barcellos Peczenyj escreveu:
> hummm... podes usar grep + cut
> ~> cat log
> UPDATE banco.tabela SET campo1 = 10, campo2 = 20, campo3 = 30
>
> ~> grep -oE 'campo1 = [0-9]*' log
> campo1 = 10
>
> ~> grep -oE 'campo1 = [0-9]*' log | cut -d= -f2
> 10
>
> ~> var1=$(grep -oE 'campo1 = [0-9]*' log | cut -d= -f2)
>
> ~> echo $var1
> 10
>
> On 12/6/06, Victor Leonardo <address@hidden> wrote:
> > Bom dia pessoal!
> >
> > Preciso definir variáveis a partir da leitura do arquivo de log do
> > MySQL. Por exemplo, o log me retorna a seguinte linha:
> >
> > UPDATE banco.tabela SET campo1 = 10, campo2 = 20, campo3 = 30 ...
> >
> > O que estou querendo fazer é filtrar alguns desses campos e atribuir
> o
> > valor de cada um a uma variável específica. Algo do tipo:
> >
> > var1 (que se refere a 'campo1') = 20
> > var2 (que se refere a 'campo3') = 30
> >
> > Alguém poderia me explicar como eu posso fazer isso?
> >
> > Obrigado!
> > Victor
> >
> >
> >
> >
> >
> > ----------------------------------------------------------
> > 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
> > ----------------------------------------------------------
> > Servidor Newsgroup da lista: news.gmane.org
> > Grupo: gmane.org.user-groups.programming.shell.brazil
> >
> >
> > Links do Yahoo! Grupos
> >
> >
> >
>
> --
> Tiago B Peczenyj
> Linux User #405772
>
> # cd /pub
> # more beer
>
>
>
>

--
Victor L. Gomes
Suporte
EAC Software
Tel.: (31) 3273-4415
Visite nosso site: www.eacsoftware.com.br



---------------------------------------------------------------------
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
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil


Links do Yahoo! Grupos





--
Tiago B Peczenyj
Linux User #405772

# cd /pub
# more beer


reply via email to

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