[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