別の単語から始まる単語のインスタンス数を計算する方法

別の単語から始まる単語のインスタンス数を計算する方法

grep今日から、次の形式のMySQLエラーログが必要です。

`date +"%y%m%d"` (140710) 

その単語のすべてのインスタンスを見つけますpartitioned

私はいろいろな方法を試しましたが、役に立たなかった。これはうまくいくようです:

more +/"`date +"%y%m%d"`" mysql-error.log | grep -c partitioned

ただし、ログファイルに今日のエントリが含まれていない場合は、ゼロを返すのではなく、ファイル全体を検索してファイル全体の番号を返します。

今日のエントリがない場合は、ファイル全体ではなくgrep0を返し、結果を計算する必要があります。

sedこれを行うより良い方法はありますかawk


技術的に計算すべき内容} partitioned {の後には英数字の文字列が続きます。分割された{(文字列なし)}がある可能性があるため、計算しないでください。

しかし、これは厳しい要件ではありません。私は単語の発生回数を数えるだけで幸せですpartitioned

以下はログファイルの例です。

140109 12:25:07 [Note] WSREP: view(view_id(PRIM,c4819ddf-7952-11e3-89fc-4f9f1bfa267f,3) memb {
    c4819ddf-7952-11e3-89fc-4f9f1bfa267f,
} joined {
} left {
} partitioned {
    f85c2e70-7952-11e3-a759-aa8332246e85,
})
140109 12:25:07 [Note] WSREP: Shifting JOINED -> SYNCED (TO: 85)

ベストアンサー1

GNU sedanhd を使用すると、grep次のことを試すことができます。

sed -n "/$(date +%y%m%d)/,\$p" file | grep -c partitioned

/pattern/,$最初のパターンをファイルの終わりに合わせます。

あなたの意見に基づいて:

$ sed -n "/$(date +%y%m%d)/,\$p" 1.txt | grep -c partitioned
1

一致する日付はありません:

$ sed -n "/$(date +%y%m%d)/,\$p" 1.txt | grep -c partitioned
0

おすすめ記事