Como fazer a saída Tail -f com cores usando apenas o Awk e mostrar o restante da saída?

Como fazer a saída Tail -f com cores usando apenas o Awk e mostrar o restante da saída?

Consegui fazer uma tail -fsaída com cores usando o awkcomando. Mas não tenho certeza de como gerar o restante do log, pois parece estar filtrando apenas essas duas linhas. Também quero ver as outras linhas conforme o log é gravado.

O que preciso colocar no awkcomando para mostrar o restante da saída?

Imagem do meu problema. O texto em vermelho acima está sem uso awke exibe o arquivo tail -f log. E abaixo disso está o mesmo comando com a awkfiltragem de cores.

insira a descrição da imagem aqui

Responder1

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

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

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

  • as linhas correspondentes User@Host:são processadas com $0 = "\033[32m" $0 "\033[39m", que circunda a linha atual com os códigos de escape fornecidos;
  • as linhas correspondentes Query_time:são processadas com $0 = "\033[29m" $0 "\033[39m";
  • as 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 cumulativas: todas as ações cujos padrões correspondem à linha atual são executadas, na ordem em que foram definidas. Uma correspondência de linha User@Host:é modificada (primeira ação) e impressa (terceira ação). Uma correspondência de linha Query_time:é modificada (segunda ação) e impressa (terceira ação). Uma linha que não corresponde a nenhuma delas é impressa (terceira ação).

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

informação relacionada