使用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 设为变量。