【问题标题】:Log analysis using AWK使用 AWK 进行日志分析
【发布时间】:2016-01-19 20:33:35
【问题描述】:

我正在寻找一些关于日志分析问题的帮助,我为此苦恼了一段时间。 我有一个日志文件,其中包含来自多个进程的日志,但它没有按排序顺序。通常,日志文件中的每一行都以进程 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。提前谢谢大家。

【问题讨论】:

    标签: awk gawk


    【解决方案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 设为变量。

    【讨论】:

      【解决方案2】:

      尚不完全清楚在您的情况下最健壮的脚本是什么,但如果 $PID 是感兴趣的 pid,那么下面说明了一种方法:

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

      例如,使用 PID=90234 和您的示例,输出将是:

      90234  abcd 
      90234  pqrs
      90234  stuv 
             tttt 
             gggg
      

      【讨论】:

        猜你喜欢
        • 2020-09-13
        • 2012-04-20
        • 2022-01-25
        • 2012-05-11
        • 1970-01-01
        • 2021-04-24
        • 2012-09-13
        • 1970-01-01
        • 2013-11-26
        相关资源
        最近更新 更多