grep
今日から、次の形式のMySQLエラーログが必要です。
`date +"%y%m%d"` (140710)
その単語のすべてのインスタンスを見つけますpartitioned
。
私はいろいろな方法を試しましたが、役に立たなかった。これはうまくいくようです:
more +/"`date +"%y%m%d"`" mysql-error.log | grep -c partitioned
ただし、ログファイルに今日のエントリが含まれていない場合は、ゼロを返すのではなく、ファイル全体を検索してファイル全体の番号を返します。
今日のエントリがない場合は、ファイル全体ではなくgrep
0を返し、結果を計算する必要があります。
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 sed
anhd を使用すると、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