Awk trailing -fを使用して出力色のみを指定し、残りの出力を表示するにはどうすればよいですか?

Awk trailing -fを使用して出力色のみを指定し、残りの出力を表示するにはどうすればよいですか?

tail -fこのコマンドを使用すると、カラー出力を取得できますawk。しかし、ログの残りの部分はその2行だけをフィルタリングするようだから、どのように出力するのかわかりません。また、ログに記録されている他の行も見たいです。

awk残りの出力を表示するには、コマンドに何を入力する必要がありますか?

私の問題の写真。上記の赤いテキストは使用されず、awk全体が表示されますtail -f log。以下はカラーフィルタリングと同じコマンドですawk

ここに画像の説明を入力してください。

ベストアンサー1

一致する行を装飾として印刷するのではなく、一致する行を飾ってすべてを印刷します。

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

このawkプログラムは、3つのモードと関連タスクで構成されています。

  • 一致する行は、現在の行の周りに与えられたエスケープコードとしてUser@Host:扱われます。$0 = "\033[32m" $0 "\033[39m"
  • 一致する行はQuery_time:次のように処理されます$0 = "\033[29m" $0 "\033[39m"
  • ゼロ以外のモードの行1(つまり、すべての行)は、現在の行を印刷するデフォルトのジョブを使用して処理されます。

これは蓄積されます。パターンが現在の行と一致するすべてのジョブは、定義された順序で実行されます。User@Host:行の一致を修正し(最初のジョブ)、印刷します(3番目のジョブ)。Query_time:行の一致を修正し(2番目のジョブ)、印刷します(3番目のジョブ)。両方とも一致しない行を印刷します(3番目のジョブ)。

これは、行が処理されたかどうかを追跡せずにすべての行を印刷する最も簡単な方法です(行を2回印刷するのを避けるため)。各ジョブステートメントセットから何かを印刷するのではなく、必要に応じて現在の行を変更して一度だけ印刷します(ただし、常に印刷します)。

おすすめ記事