[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]