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

Responder a