【发布时间】:2020-07-08 10:39:30
【问题描述】:
我有一个应用程序服务的日志文件,我正在尝试提取其中一个子进程转储的堆栈跟踪。堆栈跟踪的模式与通常的日志文件完全不同。
通常的 webapp 日志文件条目:
2020-03-26 08:31:05.000 : INFO : (18582) : (SERVICE) : MSG_1234 : Process id 98765. Standard output and error:
堆栈跟踪示例:
7f318820d000-7f318a106000 rwxp 00000000 00:00 0 [stack:10002]
7f318a106000-7f318a107000 ---p 00000000 00:00 0
我需要提取堆栈跟踪,这是我能够做到的。堆栈跟踪的问题在于它们以相反的顺序转储。每个转储的块都是有序的,但是这些块以相反的顺序转储。
这是我如何提取块的示例(注意:开始和停止模式在同一行):
echo "STOP message START
five
six
STOP message START
three
four
STOP message START
one
two
STOP message" | awk '/START/ {flag=1; next} flag; /STOP/ {flag=0}'
这是输出:
five
six
three
four
one
two
STOP message
虽然,我想得到这个:
one
two
three
four
five
six
我可以忍受最后一个匹配的“停止消息”,但我需要按顺序排列块。
【问题讨论】: