grepを使用してログファイルからログを取得する

grepを使用してログファイルからログを取得する

コマンドを使用してログファイルからログを取得しようとしますgrep。ログファイルの形式は次のとおりです。

[1/10/16 23:55:33:018 PST] 00000057 ServerObj E   SECJ0373E: Exception message
at com.own.ws.wim.util.UniqueNameHelper.formatUniqueName(UniqueNameHelper.java:102)
at com.own.ws.wim.ProfileManager.getImpl(ProfileManager.java:1569)

これまではログを取得できますが、スタックトレースも必要です。

grep -i '^[[:space:]]*at' --before-context=2 SystemOut.log | grep "1/13/16 7:[1-60]" 

output : [1/10/16 23:55:33:018 PST] 00000057 ServerObj E   SECJ0373E: Exception message

これを達成する方法についてのアイデアはありますか?

答え1

フィールド区切り記号 "at"を持つawkも機能します。 "^[" は、日付スタンプで始まる行と一致します。ここで $1 は最初のフィールドです。

awk -F"at" '/^\[/{print $1}' test

あなたの意見によると、あなたの要件を正しく理解したら、awkコマンドにあなたが探している行を含める必要があり、grepの範囲は7時から8時の間でなければなりません。

しかし、2つのリストが必要なようです。ログファイルでawkコマンドを実行し、それを別のファイルに出力します。その後、2番目のファイルをawk / grepできます。

awk -F"at" '/^\[/{print $1}' test>> ExtractedLogs.txt
awk -F"at" '$1 ~ "07:"{print $1}' ExtractedLogs.txt>> StackTraceOnly.txt

答え2

「at」行を見つけたら、--after-context = 2を追加して他の行を再追加できます。

grep -i '^[[:space:]]*at' --before-context=2 afile | grep --after-context=2 "1/13/16 7:[1-60]"

関連情報