使用AWK进行日志分析
Log analysis using AWK
我正在寻求有关日志分析问题的帮助,我为此绞尽脑汁已有一段时间了。
我有一个日志文件,其中包含来自多个进程的日志,但它没有按排序顺序排列。通常日志文件中的每一行都以进程 ID 开头,但在某些情况下,一个条目跨越多行,如下所示
90234 abcd
90234 pqrs
98765 nbnbbb
34072 tabt
90234 stuv -|
tttt |- entry spanning over multiple lines
gggg -|
34072 yyyy
98765 tytyy
所以我的任务是提取给定 pid 的所有日志。
给定 pid,输出应采用以下格式:
对于 pid 90234:
90234 abcd
90234 pqrs
90234 stuv
tttt
gggg
对于 pid 34072:
34072 tabt
34072 yyyy
对于 pid 98765:
98765 nbnbbb
98765 nbnbbb
98765 tytyy
非常感谢任何帮助,但由于我想使用 AWK 来完成此操作,所以让所有人都尝试并坚持使用 AWK。提前谢谢大家。
目前还不完全清楚在您的情况下最强大的脚本是什么,但是如果 $PID
是感兴趣的 pid,那么下面说明了一种方法:
awk -v select="$PID" 'NF == 2 {pid=} pid == select {print}'
例如,对于 PID=90234 和您的示例,输出将是:
90234 abcd
90234 pqrs
90234 stuv
tttt
gggg
备选方案awk
因为日志文件中的字段数可能不固定
$ awk '/^[0-9]+/{p=} p==90234' log
90234 abcd
90234 pqrs
90234 stuv -|
tttt |- entry spanning over multiple lines
gggg -|
您可以像@peak 的示例那样将 pid 设为变量。
我正在寻求有关日志分析问题的帮助,我为此绞尽脑汁已有一段时间了。 我有一个日志文件,其中包含来自多个进程的日志,但它没有按排序顺序排列。通常日志文件中的每一行都以进程 ID 开头,但在某些情况下,一个条目跨越多行,如下所示
90234 abcd
90234 pqrs
98765 nbnbbb
34072 tabt
90234 stuv -|
tttt |- entry spanning over multiple lines
gggg -|
34072 yyyy
98765 tytyy
所以我的任务是提取给定 pid 的所有日志。
给定 pid,输出应采用以下格式:
对于 pid 90234:
90234 abcd
90234 pqrs
90234 stuv
tttt
gggg
对于 pid 34072:
34072 tabt
34072 yyyy
对于 pid 98765:
98765 nbnbbb
98765 nbnbbb
98765 tytyy
非常感谢任何帮助,但由于我想使用 AWK 来完成此操作,所以让所有人都尝试并坚持使用 AWK。提前谢谢大家。
目前还不完全清楚在您的情况下最强大的脚本是什么,但是如果 $PID
是感兴趣的 pid,那么下面说明了一种方法:
awk -v select="$PID" 'NF == 2 {pid=} pid == select {print}'
例如,对于 PID=90234 和您的示例,输出将是:
90234 abcd
90234 pqrs
90234 stuv
tttt
gggg
备选方案awk
因为日志文件中的字段数可能不固定
$ awk '/^[0-9]+/{p=} p==90234' log
90234 abcd
90234 pqrs
90234 stuv -|
tttt |- entry spanning over multiple lines
gggg -|
您可以像@peak 的示例那样将 pid 设为变量。