したがって、次のログサンプルがあります。
2015-03-30 10:19:44,200 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d87de8e-1276-4496-b49d-dd4cd375cbe4 Info:P23 Code:ABCD] A log message 1
2015-03-30 10:19:45,250 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d87de8e-1276-4496-b49d-dd4cd375cbe4 Info:P23 Code:ABCD] A log message 2
2015-03-30 10:19:45,700 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d87de8e-1276-4496-b49d-dd4cd375cbe4 Info:P23 Code:ABCD] log message of exception occurred in
abc.cdef.class.sdk.SampleException: Message exception..
<stacktrace lines goes here>
2015-03-30 10:19:46,100 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d87de8e-1276-4496-b49d-dd4cd375cbe4 Info:P23 Code:ABCD] A log message 3
2015-03-30 10:19:46,120 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d87de8e-1276-4496-b49d-dd4cd375cbe4 Info:P23 Code:ABCD] A log message 4
2015-03-30 10:19:46,120 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d800e80-5276-4006-a44d-dd4cea7bcbe1 Info:P13 Code:AB4D] A log message 6
サーバーに着信する各要求には固有のIDAがあります。特定のIDAを含むすべてのログ行を特定し、見つかったすべてのエントリを別のログファイルに保存したいと思います。 grepを使用する理由は、パターンが見つかったファイルと行番号も追加するためです(grep -n)(検索は2〜3個のファイルで行われます)。しかし、スタックトレース例外も含めたいと思いましたが、その行に私が検索したIDAがなかったため、これは発生しませんでした。
また、以下のように、スタックトレース例外が特定のIDAの最後のエントリの一部として発生する可能性があります。
2015-03-30 10:19:44,200 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d87de8e-1276-4496-b49d-dd4cd375cbe4 Info:P23 Code:ABCD] A log message 1
2015-03-30 10:19:45,200 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d87de8e-1276-4496-b49d-dd4cd375cbe4 Info:P23 Code:BECD] A log message 2
2015-03-30 10:19:44,200 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d87de8e-1276-4496-b49d-dd4cd375cbe4 Info:P23 Code:DFCD] A log message 3
2015-03-30 10:19:45,200 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d87de8e-1276-4496-b49d-dd4cd375cbe4 Info:P23 Code:BBCD] A log message 4
2015-03-30 10:19:45,200 DEBUG [Default : 1] [Application:ABC BIW: IDA:6d87de8e-1276-4496-b49d-dd4cd375cbe4 Info:P23 Code:ABCC] log message of exception occurred in
abc.cdef.class.sdk.SampleException: Message exception..
<stacktrace lines goes here>
2015-03-30 10:19:45,200 DEBUG [Default : 1] [Application:ABC BIW: IDA:ed8ede83-1116-4697-a69d-ee6cd575cbe7 Info:P23 Code:ABDD] A log message 5
これを行うための提案はありますか?
PS1 - あちこちで検索してみましたが、ほとんどのタグの間で検索することがわかりましたが、これは私にとって十分ではありません。
PS2 - 私のソリューションOSは現在1行のgrepですが、Perl、awk、sed、Python、または他の「bashコマンド方式」などの他のソリューションでも開いています。
ベストアンサー1
Perlソリューション:
perl -ne '$id = "6d87de8e-1276-4496-b49d-dd4cd375cbe4";
print if $match = (/IDA:$id/ .. /IDA:(?!$id)/)
and $match !~ /E0$/
' *.log
説明する:
/regex1/ .. /regex2/
一致する行間の行に対して true を返します。IDA:(?!$id)
私とIDA:
興味がない$ id経由- 範囲の最後の行は
E0
条件チェックのサフィックスとして表示されるため、最後の行(IDAが異なる行)は印刷されません。
ファイル名と行番号を含めるには、次のようにします。
print "$ARGV:$.:$_"
見積もりを完了する前に、以下を追加してください。
; $. = 0 if eof