コマンドを使用してログファイルからログを取得しようとします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]"