gpt4 book ai didi

linux - awk 模式可以匹配多行吗?

转载 作者:IT王子 更新时间:2023-10-29 00:19:27 27 4
gpt4 key购买 nike

我有一些复杂的日志文件,我需要编写一些工具来处理它们。我一直在玩 awk,但我不确定 awk 是否是解决此问题的正确工具。

我的日志文件是 OSPF 协议(protocol)解码的打印输出,其中包含各种协议(protocol) pkts 的文本日志及其内容,以及用其值标识的各种协议(protocol)字段。我想处理这些文件并仅打印出与特定 pkts 相关的日志的某些行。每个 pkt 日志都可以包含该 pkt 条目的不同行数。

awk 似乎能够处理与模式匹配的单行。我可以找到所需的 pkt,但随后我需要匹配后续行中的模式以确定它是否是我要打印的 pkt。

另一种看待这个问题的方法是,我想隔离日志文件中的几行,并根据几行上的模式匹配打印出作为特定 pkt 详细信息的那些行。

因为 awk 似乎是基于行的,所以我不确定这是否是最好的工具。

如果 awk 可以做到这一点,它是如何做到的?如果没有,关于为此使用哪个工具有什么建议吗?

最佳答案

Awk 可以轻松检测多行模式组合,但您需要创建所谓的 state machine 在您的代码中识别序列。

考虑这个输入:

how
second half #1
now
first half
second half #2
brown
second half #3
cow

如您所见,识别单个模式很容易。现在,我们可以编写一个 awk 程序,它仅在 first half 行前面直接识别 second half 。 (使用更复杂的状态机,您可以检测任意序列的模式。)

/second half/ {
if(lastLine == "first half") {
print
}
}

{ lastLine = $0 }

如果你运行它你会看到:

second half #2

现在,这个示例非常简单,几乎只是一个状态机。有趣的状态仅在 if 语句的持续时间内持续,并且前面的状态是隐式的,具体取决于 lastLine 的值。 在更规范的状态机中,您将保留一个显式状态变量和状态到状态的转换取决于现有状态和当前输入。但您可能不需要那么多控制机制。

关于linux - awk 模式可以匹配多行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14350856/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com