grep/sed/awk を使用したログファイルエントリの分類

grep/sed/awk を使用したログファイルエントリの分類

さまざまな形式の多数の行を含む非常に大きなログファイルを処理する必要があります。

私の目標は、同じ開始パターン(例: "^2011-02-21.*MyKeyword.*Error")を使用して一意の行項目を抽出し、各行パターンのサンプルリストを効果的に取得してパターンを識別することです。 。

私はこれまでいくつかのパターンを知っているので、ファイルを手動でナビゲートすることは確かにオプションではありません。

既知のパターンに加えて、自動的に抽出したい未知のパターンがたくさんあります。

これを行う最良の方法は何ですか?私は正規表現についてたくさん知っていますが、awk / sedについてはまだ多くのことをしていません。

ベストアンサー1

私が正しく理解したら、パターンが複数あり、各パターンの一致するものを抽出したいと思います。次のawkスクリプトはこの問題を解決するはずです。指定されたパターンの最初の出現を印刷し、その後の出現が印刷されないようにマークされたパターンを記録します。

awk '
/^2011-02-21.*MyKeyword.*Error/ {
    if (!seen["^2011-02-21.*MyKeyword.*Error"]++) print;
    next;
}
1 {if (!seen[""]++) print}  # also print the first line that matches no pattern
'

MyKeyword.*Errorこれは1日に1行を維持するバリアントです。

awk '
/^[0-9]{4}-[0-9]{2}-[0-9]{2}.*MyKeyword.*Error/ {
    if (!seen[substr($0,10) "MyKeyword.*Error"]++) print;
    next;
}
'

おすすめ記事