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: Enio Onodera
Subject: Re: [shell-script] Sed: Imprimir linha XXX somente-se a linha seguinte for YYY
Date: Sun, 24 Oct 2010 05:36:43 -0700 (PDT)

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> escreveu:

De: Vinicius Xavier <address@hidden>
Assunto: Re: [shell-script] Sed: Imprimir linha XXX somente-se a linha seguinte 
for YYY
Para: address@hidden
Cc: address@hidden
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> escreveu:



De: Edmundo Ribeiro Licker <address@hidden>

Assunto: [shell-script] Sed: Imprimir linha XXX somente-se a linha seguinte for 
YYY

Para: address@hidden

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]



reply via email to

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