[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] formatação condicional com awk
From: |
Leslie Watter |
Subject: |
Re: [shell-script] formatação condicional com awk |
Date: |
Wed, 11 Jul 2007 09:43:46 -0300 |
Oi Cristiano
Não tenho o log do squid aqui, mas sei o que pode te ajudar :)
No awk você pode usar o printf como abaixo:
---
$ awk '{ printf "%-10s %s\n", $1, $2 }' BBS-list
-| aardvark 555-5553
-| alpo-net 555-3412
-| barfly 555-7685
-| bites 555-1675
-| camelot 555-0542
http://www.gnu.org/manual/gawk/html_node/Printf-Examples.html
---
e para deixar só a coluna que vc quer em vermelho, use os seguintes códigos
de cor (para deixar com a cor que vc quiser depois)
---
http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html
Black 0;30 Dark Gray 1;30
Blue 0;34 Light Blue 1;34
Green 0;32 Light Green 1;32
Cyan 0;36 Light Cyan 1;36
Red 0;31 Light Red 1;31
Purple 0;35 Light Purple 1;35
Brown 0;33 Yellow 1;33
Light Gray 0;37 White 1;37
---
Sendo assim:
/TCP_DENIED/
printf("%d/%m/%y %H:%M %-15s \033[31m %-25s \033[m%-80s", $1, $8,
substr($4,1,index($4,"/"))), substr($7,1,80)) )
Faltou colocar o $3 em algum lugar, provavelmente no final do teu printf vai
ter um %s ou %d, depende do teu arquivo ...
Não testei aqui, mas é só vc modificar um pouco o printf que deve funcionar
pra ti :)
[]'s
LEslie
2007/7/10, Cristiano Ferrari <address@hidden>:
>
> Caríssimos, boa noite.
>
> Estou montando um script para facilitar a leitura do log do squid.
>
> O objetivo é tornar a verificação mais rápida, tabulando apenas os
> campos que necessito em colunas de tamanho fixo. Isto é para aquelas
> horas quando você quer dar uma rápida chegada no que passou ou não
> pelo proxy.
>
> Para isso eu converti a data em um formato "humanamente" legível e
> listei os campos que necessito ver, usando o awk. Tudo muito bom e
> muito lindo, exceto por um detalhe.
>
> Eu gostaria que, se o acesso fosse negado, a linha fosse impressa em
> vermelho, para facilitar a localização de bloqueios. Quase consegui.
>
> O script ficou assim:
>
> awk '{if (substr($4,1,index($4,"/"))=="TCP_DENIED/") {print
> "\033[31m"} else {print "\033[m"}} \
> {print \
> strftime("%d/%m/%y %H:%M",$1) \
> " " \
> sprintf("%-15s",$8) \
> " " \
> sprintf("%-25s",substr($4,1,index($4,"/"))) \
> " " \
> sprintf("%-80s",substr($7,1,80)) \
> " " \
> $3 } \
> {print "\033[m"}' /var/log/squid/access.log
>
> Tá quase bom, mas há um problema. Minha intenção era colocar o if
> dentro de um único print, mas não consegui acertar a sintaxe. Do modo
> com está, que quase resolve o problema, a cada chamada do print uma
> quebra de linha é adicionada, fazendo com que sejam impressas várias
> linhas em branco entre uma linha de dados e outra.
>
> Alguém pode sugerir uma maneira de eu jogar a cor sem produzir linhas
> em branco?
>
> E se eu quisesse que apenas a coluna que imprime o parâmetro $4
> ficasse vermelha, e não a linha inteira, como poderia fazer?
>
> Abraço a todos.
>
> Cristiano Ferrari
>
>
>
--
Leslie H. Watter
[As partes desta mensagem que não continham texto foram removidas]