次の名前のログでいっぱいのディレクトリがあります。
info.log00001
info.log00002
info.log00003
...
info.log09999
info.log
私の現在の出力(grep -cを使用)
特定のエラーがどれだけ頻繁に発生するかを分析する必要があるため、そのディレクトリに移動して次のようにしてgrep -crw . -e "FooException BarError" | sort -n | less
次のようにします。
./info.log00001: 1
./info.log00002: 0
./info.log00003: 42
...
./info.log09999: 25
./info.log: 0
ls -lt
その後、修正日を確認して、最もエラーが発生した時期を分析できます。
私が望む出力(数と日付を含む)
とにかく、同じ行に数と日付を出力する方法を見つけたいと思います。これにより、私の分析が簡単になります。私は次のようなものが欲しい:
2015-09-31 10:00 ./info.log00001: 1
2015-09-31 10:15 ./info.log00002: 0
2015-09-31 10:30 ./info.log00003: 42
...
2016-04-01 13:20 ./info.log09999: 25
2015-09-31 13:27 ./info.log: 0
追加情報
理想的には、単一のコマンドでこれを実行したいのですが、最初にgrep
コマンドの出力をファイルに入れてからそのファイルを処理することも可能です。
また、日付形式または日付が行の終わりであるか行の始まりであるかについてはあまり気にしません。私が望むのは、ファイルを最も古いものから始めて日付で並べ替えることです(名前の中で最小の数字を持つファイルでもあります)。
達成できる方法を見つけました。似たようなものawk
grep
しかし、私の場合は、出力からファイル名を解析するので動作しません。私の場合、grep
出力にはファイルパスよりも多くのテキストが含まれています。
これについてのフィードバックをいただきありがとうございます。
ベストアンサー1
gnu find
ファイル名に改行文字が含まれていないと仮定すると、 'find
を使用できます。-printf
希望の形式でmtime
+ファイル名を出力して実行し、grep
数を取得します。
find . -type f -printf '%TY-%Tm-%Td %TH:%TM %p: ' -exec grep -cw "whatever" {} \; | sort -k1,1 -k2,2
または、zsh
変更時間に基づいてグローバルに並べ替えることができます(次のように)。グローバル予選.
- 一般ファイルの選択、Om
降順のソート時間) 次に、各ファイルに対してmtime
印刷を使用します。stat
モジュール、ファイル名を入力し、次のように数を取得しますgrep
。
zmodload zsh/stat
for f in ./**/*(.Om)
do
printf '%s %s\t%s %s: ' $(zstat -F '%Y-%b-%d %H:%M' +mtime -- $f) $f
grep -cw "whatever" $f
done