我有一个看起来像这样的日志文件:
11-Sep-2012 00:00:00 clojure.contrib.logging$fn__43$impl_write_BANG___51 invoke INFO: creditAcc(args=[1506112834429596390 7080851004 4500]) 11-Sep-2012 00:00:00 clojure.contrib.logging$fn__43$impl_write_BANG___51 invoke INFO: callProf|tupsCredit|180|[1506112834429596390 7080851004 45] 11-Sep-2012 00:00:00 clojure.contrib.logging$fn__43$impl_write_BANG___51 invoke INFO: creditAcc(args=[1506112834429596390 7080851004 4500]) -> done. 11-Sep-2012 00:00:00 clojure.contrib.logging$fn__43$impl_write_BANG___51 invoke INFO: return(1506112834429596390,0)
日志文件中的每个条目跨越两行,因此每个条目都以时间戳开头。我已经设法使用 sed 替换了第一行末尾的换行符,但问题是日志条目中间的某个地方是 java stacktrace 消息。当 sed 通过堆栈跟踪时,它会反转条目的顺序,它们以 INFO 或 ERROR 等开头,时间戳显示为第二行。因此,我正在寻找一种解决方案,该解决方案将强制 sed 使用正则表达式 [类似于 ^\d{2}] 将时间戳识别为第一行,然后在同一行中,将换行符替换为空格,然后将值分解为用于分析的列。堆栈跟踪消息以空格 [^\s] 开头,因此它们很容易识别和跳过。
使用 sed 或 awk 解决此问题的最佳方法是什么?