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

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

Re: [shell-script] Sed: Imprimir linha XXX somente-se a linha seguinte f


From: eric miranda
Subject: Re: [shell-script] Sed: Imprimir linha XXX somente-se a linha seguinte for YYY
Date: Mon, 25 Oct 2010 12:17:37 -0200

Vai patentear ou dá pra colar aqui a solução?

flw!

Em 24 de outubro de 2010 16:55, Edmundo Ribeiro Licker <
address@hidden> escreveu:

> Utilizei o grep -A e -B e pipe até conseguir filtrar exatamento o que eu
> queria.
>
> Obrigado pela dica!
>
> Edmundo
>
>
>
> Em 24 de outubro de 2010 10:36, Enio Onodera <address@hidden
> >escreveu:
>
> >
> >
> > Não entendi uma coisa. O retorno que vc não deseja coletar, vem com
> > asterisco (*User  14733*)? Pq se vier, o sed não vai coletar pq a linha
> > começa com * e não com User.Nesse caso acho q vc poderia usar um if no
> User
> > ou no MAC, por exemplo... pelos exemplos q vc mostrou, ele não retorna o
> MAC
> > caso a conexão não esteja ativa.De qualquer modo, em resposta ao título
> do
> > post, para imprimir uma linha somente se existir a outra, pode-se usar o
> > grep -B (imprime linha que está antes da busca) ou grep -A (imprime a que
> > está dps).
> > Abs,Enio Onodera.
> > --- Em dom, 24/10/10, Vinicius Xavier <address@hidden
> <vinicius_xavier%40yahoo.com.br>>
> > escreveu:
> >
> > De: Vinicius Xavier <address@hidden<vinicius_xavier%
> 40yahoo.com.br>
> > >
> > Assunto: Re: [shell-script] Sed: Imprimir linha XXX somente-se a linha
> > seguinte for YYY
> > Para: address@hidden <edmundo%40licker.com.br>
> > Cc: address@hidden <shell-script%40yahoogrupos.com.br>
> > Data: Domingo, 24 de Outubro de 2010, 7:25
> >
> >
> >
> >
> > Olá Edmundo,
> >
> >
> >
> > Consegui separar em colunas utilizando o paste.
> >
> >
> >
> > cat  wireless.log
> >
> > [2010-10-18 20:19:43] Got auth msg Member ANY
> >
> > Mac 0C:EE:E6:D5:E9:D7
> >
> > User 14788
> >
> > Token $1$13939014$/bNIDadG4/rEla6
> >
> > Redirect http://www.google.com/
> >
> > Action Permit
> >
> > Mode login
> >
> > $ paste -s wireless.log
> >
> > [2010-10-18 20:19:43] Got auth msg Member ANY   Mac 0C:EE:E6:D5:E9:D7
> > User 14788      Token $1$13939014$/bNIDadG4/rEla6       Redirect
> > http://www.google.com/ Action Permit   Mode login
> >
> >
> >
> > $ paste -s wireless.log > wireles.log.EmColunas
> >
> > $ cat wireles.log.EmColunas
> >
> > [2010-10-18 20:19:43] Got auth msg Member ANY   Mac 0C:EE:E6:D5:E9:D7
> > User 14788      Token $1$13939014$/bNIDadG4/rEla6       Redirect
> > http://www.google.com/ Action Permit   Mode login
> >
> >
> >
> > Abs,
> >
> > Vinícius Xavier
> >
> > --- Em dom, 24/10/10, Edmundo Ribeiro Licker <address@hidden
> <edmundo%40licker.com.br>>
> > escreveu:
> >
> > De: Edmundo Ribeiro Licker <address@hidden<edmundo%
> 40licker.com.br>
> > >
> >
> > Assunto: [shell-script] Sed: Imprimir linha XXX somente-se a linha
> seguinte
> > for YYY
> >
> > Para: address@hidden <shell-script%40yahoogrupos.com.br
> >
> >
> > Data: Domingo, 24 de Outubro de 2010, 2:01
> >
> >
> >
> > Pessoal,
> >
> > Estou desde as 19hs procurando a solução. Encontrei algo semelhante, mas
> >
> > nada ainda que se encaixa-se perfeitamentamente no meu problema.
> >
> > Possuo um arquivo de log de acessos wireless, o qual contêm diversas
> >
> > informações, dentre as quais, os acessos dos usuários.
> >
> > Estas informações apresentadas em linhas, conforme trecho abaixo, o qual
> >
> > refere-se a um acesso a rede wireless efetivado:
> >
> > ...
> >
> > [2010-10-18 20:19:43] Got auth msg Member ANY
> >
> > Mac 0C:EE:E6:D5:E9:D7
> >
> > User 14788
> >
> > Token $1$13939014$/bNIDadG4/rEla6
> >
> > Redirect http://www.google.com/
> >
> > Action Permit
> >
> > Mode login
> >
> > ...
> >
> > Preciso transformá-las em colunas para posterior exportação para um
> >
> > relatório em uma planilha. Para isto, estou utilizando os comando abaixo:
> >
> > # Retorna campos referentes a data
> >
> > sed -n '/Got auth msg Member/p' /usr/local/nocat/log/nocat.log | cut
> -c2-11
> >
> > > /root/scripts/logs/data
> >
> > # Retorna campos referentes ao User
> >
> > sed -n '/Got auth msg Member/,/^Timeout\t/p'
> /usr/local/nocat/log/nocat.log
> >
> > | sed -n '/^User\t/p' | cut -c6- > /root/scripts/logs/user
> >
> > # Retorna campos referentes ao MAC
> >
> > sed -n '/Got auth msg Member/,/^Timeout\t/p'
> /usr/local/nocat/log/nocat.log
> >
> > | sed -n '/^Mac\t/p' | cut -c5- > /root/scripts/logs/mac
> >
> > etc.
> >
> > Depois de retirar coletar estes dados, aninho todos em colunas com o
> > "paste"
> >
> > em um único arquivo.
> >
> > Ex.: cut -c1- /root/scripts/logs/data | paste -d ";" -
> >
> > /root/scripts/logs/hora > /root/scripts/logs/arq1
> >
> > O meu problema é que nem sempre o campo que inicia com "User" refere-se a
> >
> > uma informação de acesso, como no trecho da log abaixo:
> >
> > ...
> >
> > 3:C8:60 2C:81:58:FC:D5:B7 70:F1:A1:CB:E6:92 00:1D:D9:03:34:9F
> >
> > C4:17:FE:2D:81:CD 00:25:56:60:AB:12 00:22:69:08:AE:B2
> >
> > [2010-10-18 20:19:43] Responding with:
> >
> > *User 14733*
> >
> > Token $1$7$9vru3r2bK7AOBgQMlxtvl1
> >
> > Timeout 3600
> >
> > [2010-10-18 20:19:43] Got notification Permit of peer 0C:EE:E6:D2:E9:D4
> >
> > ...
> >
> > Ou seja, ao retirar os dados para colunas e apois colocando-os lado a
> lado,
> >
> > as informações não ficam coerentes, pois neste meio acabaram por entrar
> >
> > campos "Users" avulsos.
> >
> > Então minha idéia seria utilizar o comando "sed" com um parâmetro que o
> >
> > informasse para buscar uma determinhada linha somente se o critério
> > seguinte
> >
> > fosse comtemplado, por exemplo:
> >
> > Somente apresentar as linhas que estejam exatamente nesta ordem:
> >
> > Got auth msg Member
> >
> > ^Mac
> >
> > ^User
> >
> > ^Token
> >
> > ^Redirect
> >
> > ^Action
> >
> > ^Mode
> >
> > Pois somente assim, acredito eu, as informações poderão ser extraidas e
> >
> > aninhas em colunas, posteriormente, com exatidão.
> >
> > Desculpem-me se aloguei-me demais na exposição do meu caso.
> >
> > Não sou muito bom em lógica e ainda engatinho no Shell, portanto,
> sugestões
> >
> > para "profissionalização" da solução tbm são bem vindas.
> >
> > Obrigado!
> >
> > -------------------------------------------
> >
> > Edmundo Ribeiro Licker
> >
> > -------------------------------------------
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >
> >
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
> ------------------------------------
>
> ---------------------------------------------------------------------
> 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
>
>
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

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