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