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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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: [EMAIL PROTECTED]
> > > ----------------------------------------------------------
> > > 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: [EMAIL PROTECTED]
> ---------------------------------------------------------------------
> 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

Responder a