Wie kann ich die Ausgabe mit Farben mithilfe von Tail -f nur unter Verwendung von Awk bearbeiten und den Rest der Ausgabe anzeigen?

Wie kann ich die Ausgabe mit Farben mithilfe von Tail -f nur unter Verwendung von Awk bearbeiten und den Rest der Ausgabe anzeigen?

Ich konnte tail -fmit dem Befehl eine Ausgabe mit Farben erstellen awk. Aber ich bin mir nicht sicher, wie ich den Rest des Protokolls ausgeben soll, da anscheinend nur diese beiden Zeilen gefiltert werden. Ich möchte auch die anderen Zeilen sehen, während das Protokoll geschrieben wird.

Was muss ich in den awkBefehl eingeben, um den Rest der Ausgabe anzuzeigen?

Bild meines Problems. Der rote Text oben ist ohne Verwendung awkund zeigt das gesamte an tail -f log. Und darunter ist derselbe Befehl mit der awkFarbfilterung.

Bildbeschreibung hier eingeben

Antwort1

Anstatt passende Linien mit Verzierungen zu drucken, verzieren Sie passende Linien und drucken Sie alles:

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

Dieses awkProgramm besteht aus drei Mustern und zugehörigen Aktionen:

  • Übereinstimmende Zeilen User@Host:werden mit verarbeitet $0 = "\033[32m" $0 "\033[39m", wobei die aktuelle Zeile mit den angegebenen Escape-Codes umschlossen wird.
  • Übereinstimmende Zeilen Query_time:werden mit verarbeitet $0 = "\033[29m" $0 "\033[39m";
  • Zeilen, deren Muster 1ungleich Null ist (also alle Zeilen), werden mit der Standardaktion verarbeitet, die darin besteht, die aktuelle Zeile zu drucken.

Diese sind kumulativ: Alle Aktionen, deren Muster mit der aktuellen Zeile übereinstimmen, werden in der Reihenfolge ausgeführt, in der sie definiert sind. Eine übereinstimmende Zeile User@Host:wird geändert (erste Aktion) und gedruckt (dritte Aktion). Eine übereinstimmende Zeile Query_time:wird geändert (zweite Aktion) und gedruckt (dritte Aktion). Eine Zeile, die mit keinem der beiden übereinstimmt, wird gedruckt (dritte Aktion).

Das ist die einfachste Technik, um alle Zeilen zu drucken, ohne nachverfolgen zu müssen, ob eine Zeile bereits verarbeitet wurde (um das zweimalige Drucken einer Zeile zu vermeiden). Anstatt in jedem Satz von Aktionsanweisungen etwas zu drucken, ändern wir die aktuelle Zeile entsprechend und drucken sie nur einmal (aber immer).

verwandte Informationen