¿Cómo hacer Tail -f salida con colores usando solo Awk y mostrar el resto de la salida?

¿Cómo hacer Tail -f salida con colores usando solo Awk y mostrar el resto de la salida?

Pude hacer una tail -fsalida con colores usando el awkcomando. Pero no estoy seguro de cómo generar el resto del registro, ya que parece estar filtrando solo esas 2 líneas. También quiero ver las otras líneas a medida que se escribe el registro.

¿Qué necesito poner en el awkcomando para mostrar el resto del resultado?

Imagen de mi problema. El texto rojo de arriba no se usa awky muestra el archivo completo tail -f log. Y debajo está el mismo comando con el awkfiltrado de color.

ingrese la descripción de la imagen aquí

Respuesta1

En lugar de imprimir líneas a juego con decoraciones, decora líneas a juego e imprime todo:

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

Este awkprograma consta de tres patrones y acciones asociadas:

  • las líneas coincidentes User@Host:se procesan con $0 = "\033[32m" $0 "\033[39m", que rodea la línea actual con los códigos de escape dados;
  • las líneas coincidentes Query_time:se procesan con $0 = "\033[29m" $0 "\033[39m";
  • Las líneas para las cuales el patrón 1es distinto de cero (por lo que todas las líneas) se procesan con la acción predeterminada, que es imprimir la línea actual.

Son acumulativos: todas las acciones cuyos patrones coinciden con la línea actual se ejecutan, en el orden en que están definidas. Se modifica una línea coincidente User@Host:(primera acción) y se imprime (tercera acción). Se modifica una coincidencia de línea Query_time:(segunda acción) y se imprime (tercera acción). Se imprime una línea que no coincide con ninguno de los dos (tercera acción).

Esa es la técnica más sencilla para imprimir todas las líneas, sin tener que realizar un seguimiento de si una línea se ha procesado todavía (para evitar imprimir una línea dos veces). En lugar de imprimir algo en cada conjunto de declaraciones de acción, modificamos la línea actual según corresponda y solo la imprimimos una vez (pero siempre la imprimimos).

información relacionada