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
答え2
2つのgrepを一緒に接続してみることができます。
grep `date +"%y%m%d"` mysql-error.log | grep -c partitioned
それとももっと簡単です:
grep -c "`date +%y%m%d`.*partitioned" mysql-error.log
編集する
日付と「partitioned」という単語が異なる行にあるので、
d=$(date +"%y%m%d"); awk '/'$d'/,EOF {print $0}' mysql-error.log | grep -c partitioned
または:
awk '/'$(date +%y%m%d)'/,EOF {print $0}' mysql-error.log | grep -c partitioned