使用AWK进行日志分析

时间:2016-01-19 20:33:36

标签: awk gawk

我正在寻找一些有关日志分析问题的帮助,而我正在讨论这个问题。 我有一个日志文件,其中包含来自多个进程的日志,但它不是按排序顺序。通常,日志文件中的每一行都以进程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。非常感谢你们。

2 个答案:

答案 0 :(得分:1)

目前还不完全清楚你的案例中最强大的脚本是什么,但如果$PID是感兴趣的pid,那么下面就说明了一种方法:

awk -v select="$PID" 'NF == 2 {pid=$1} pid == select {print}'

例如,对于PID = 90234和您的示例,输出将为:

90234  abcd 
90234  pqrs
90234  stuv 
       tttt 
       gggg

答案 1 :(得分:1)

替代awk因为字段数量在日志文件中可能不是常量

$ awk '/^[0-9]+/{p=$1} p==90234' log

90234  abcd
90234  pqrs
90234  stuv        -|
      tttt         |- entry spanning over multiple lines
      gggg        -|

你可以像在@ peak的例子中那样使pid成为变量。