Como Tail -f saída com cores usando apenas awk e mostrar o resto da saída?

0

Consegui fazer uma saída tail -f com cores usando o comando awk . Mas não tenho certeza de como produzir o resto do log, já que parece estar filtrando apenas essas duas linhas. Eu também quero ver as outras linhas enquanto o log é escrito.

O que eu preciso colocar no comando awk para mostrar o restante da saída?

Imagem do meu problema. O texto vermelho acima é sem usar awk e exibe todo o tail -f log . E abaixo disso está o mesmo comando com a filtragem de cores awk .

    
por Patoshi パトシ 18.05.2016 / 17:11

1 resposta

1

Em vez de imprimir linhas correspondentes com decorações, decore linhas correspondentes e imprima tudo:

awk '/User@Host:/ { $0 = "3[32m" $0 "3[39m" }; /Query_time:/ { $0 = "3[29m" $0 "3[39m" }; 1'

Este programa awk consiste em três padrões e ações associadas:

  • as linhas correspondentes a User@Host: são processadas com $0 = "3[32m" $0 "3[39m" , que envolve a linha atual com os códigos de escape fornecidos;
  • linhas correspondentes a Query_time: são processadas com $0 = "3[29m" $0 "3[39m" ;
  • linhas para as quais o padrão 1 é diferente de zero (portanto, todas as linhas) são processadas com a ação padrão, que é imprimir a linha atual.

São cumulativos: todas as ações cujos padrões correspondem à linha atual são executadas, na ordem em que são definidas. Uma linha correspondente a User@Host: é modificada (primeira ação) e impressa (terceira ação). Uma linha correspondente a Query_time: é modificada (segunda ação) e impressa (terceira ação). Uma linha correspondente a nenhuma é impressa (terceira ação).

Essa é a técnica mais simples para imprimir todas as linhas, sem precisar controlar se uma linha já foi processada (para evitar imprimir uma linha duas vezes). Em vez de imprimir algo em cada conjunto de declarações de ação, modificamos a linha atual conforme apropriado e apenas a imprimimos uma vez (mas sempre a imprimimos).

    
por 18.05.2016 / 17:17

Tags