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: Edmundo Ribeiro Licker
Subject: Re: [shell-script] Sed: Imprimir linha XXX somente-se a linha seguinte for YYY
Date: Sun, 24 Oct 2010 16:55:21 -0200

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]



reply via email to

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