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

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

Re: [shell-script] Retornar linhas anteriores ao padrão


From: Fabiano Caixeta Duarte
Subject: Re: [shell-script] Retornar linhas anteriores ao padrão
Date: Tue, 6 Jan 2009 01:00:59 -0200

2009/1/5 Fernando Luizao <address@hidden>

> Olá César,
>
> Se estiver usando o gnu grep, pode usar o seguinte:
>
> grep -B5 padrao arquivo | head -1
>
> A opção "-B5" retornará as 5 linhas anteriores à linha que casou com o
> padrão. O head -1 vai pegar a primera dessas 5 linhas, que deve ser o login.
>
> Espero que ajude
>
> Abraços
> Fernando
>
> --- Em seg, 5/1/09, César Vianna <address@hidden> escreveu:
> De: César Vianna <address@hidden>
> Assunto: [shell-script] Retornar linhas anteriores ao padrão
> Para: address@hidden
> Data: Segunda-feira, 5 de Janeiro de 2009, 13:28
>            Opa!
>
> Tenho um arquivo de log e preciso que um script que retorne sempre a quinta
> linha anterior ao padrão localizado. O formato é o seguinte:
>
> login_do_usuarioA
> status-da-ação1= false
> status-da-ação2= true
> status-da-ação3= true
> status-da-ação4= false
> status-da-ação5= true
>
> login_do_usuarioB
> status-da-ação1= true
> status-da-ação2= false
> status-da-ação3= false
> status-da-ação4= true
> status-da-ação5= false
>
> ...
>
> O que preciso é
>
> *
> Se
>   status-da-ação5= false
> Então
>   Retorna/Imprima a quinta linha anterior ( isto é, o login do usuário)*
>
> Obs. Não tive nem uma idéia para iniciar...
>
> Grato,
> --
> César Vianna
>

Pensando na possibilidade do grep retornar mais de um bloco, você pode
conseguir os logins assim:

grep -B 5  "status-da-ação5= false" arq | awk 'NR%6==1{print}'

Ou seja, imprima todos as linhas cujos números sejam (múltiplos de 6)+1
(1,7,13,...)

Deve haver maneiras melhores ;) Sempre há.

-- 
Fabiano Caixeta Duarte
Especialista em Redes de Computadores
Linux User #195299
Ribeirão Preto - SP


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



reply via email to

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