ログファイルを監視し、特定のエントリに基づいてアクションを実行します。

ログファイルを監視し、特定のエントリに基づいてアクションを実行します。

私は次のことをしたいと思います:

tail -f 一部のファイル { 改行文字が一致または含まれている場合

somestring(タスク1の実行、タスク2の実行、...;追加のタスク)

somestring2(他の操作を実行)...

somestring999(他の操作も可能)}

これは今まで私が見たものの最も近いものです。

Tail -f /mnt/zandrologs/* | awk '/GRRFIELD/ { system("echo \"test\"") }'

ただし、これは1つのパラメータのみを認識し、1つのコマンドのみを実行します。複数のパターンを認識し、複数のコマンドを実行する必要があります。最後にbashスクリプトに入れました。

おそらくそれはただ行くべき道を超えているかもしれませんが、それが私が得たばかりです。今、文字列が見つかるまでログを読み、いくつかのゴミをコンソールに印刷します(テスト)。もっと詳しく説明したいのですが、私がやりたいことの本質に関する質問に制限します。

いくつかの基本的な構文問題にご協力いただきありがとうございます。

ベストアンサー1

必要に応じて、その方法を引き続き使用できます。
もちろん、各一致に対して複数のコマンドを実行でき、さまざまなコマンドの順序でさまざまな行を一致させることができます(より具体的なコマンドを実行しながら、さまざまな種類の行に対していくつかのコマンドを共有することもできます)。
前任者:

tail -f /mnt/zandrologs/* | awk '
/GRRFIELD/{ system("echo \"test\""); system("echo \"testG\""); }
/FRRFIELD/{ system("echo \"test2\""); system("echo \"testF\""); }
/FIELD/{ system("echo \"shared command for all lines containing FIELD\"");}'

必要に応じて、改行文字を省略してスペースに置き換えることもできます。または、より複雑なマッチングを実行できます。例のように$ 0(フル行)のみが一致する場合は、行をフィールドに分割するオーバーヘッドを避けるために、固定フィールドとwitdhモードでawkを使用することをお勧めします。

おすすめ記事