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: Vinicius Xavier
Subject: Re: [shell-script] Sed: Imprimir linha XXX somente-se a linha seguinte for YYY
Date: Sun, 24 Oct 2010 02:25:00 -0700 (PDT)

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]



reply via email to

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