gpt4 book ai didi

linux - 删除满足条件的代码块

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:54:45 25 4
gpt4 key购买 nike

我有一个非常大的文本文件,它基本上是一个消息日志,消息之间用 { 作为分隔符。如果满足特定条件,我想删除 { 之间的 block 。在下面的示例中,我想删除具有 EVENT_TYPE = BDE 的中间消息 block 并保留两个 ABC 消息。文件在 Linux 机器上,所以我可以访问所有正常的 grepsedawk 等。我可以使用这些进程找到 EVENT_TYPE 但不确定如何找到更大的 block 并将其删除。

}
/type/ - DataEvents = {
VALUE = 2342
EVENT_TYPE = ABC
VALUE_YESTERDAY = 1299
HAS_DELAY = false
SEND_TIME_RT = 18:55:21.224+00:00
}

/type/ - DataEvents = {
VALUE = 889
EVENT_TYPE = BDE
VALUE_YESTERDAY = 778
HAS_DELAY = false
SEND_TIME_RT = 18:55:21.224+00:00
}

/type/ - DataEvents = {
VALUE = 123
EVENT_TYPE = ABC
VALUE_YESTERDAY = 345
HAS_DELAY = false
SEND_TIME_RT = 18:55:21.224+00:00
}

最佳答案

每当输入数据具有名称=值对时,我发现最方便/稳健/可维护/可扩展的是首先为每条记录( rec 下面),然后通过名称访问这些值以进行测试、打印等:

$ cat tst.awk
BEGIN { FS=" *= *" }
NF { rec = rec $0 ORS; f[$1] = $2 }
/^}/ {
if ( f["EVENT_TYPE"] != "BDE" ) {
print rec
}
rec = ""
delete f
}

$ awk -f tst.awk file
/type/ - DataEvents = {
VALUE = 2342
EVENT_TYPE = ABC
VALUE_YESTERDAY = 1299
HAS_DELAY = false
SEND_TIME_RT = 18:55:21.224+00:00
}

/type/ - DataEvents = {
VALUE = 123
EVENT_TYPE = ABC
VALUE_YESTERDAY = 345
HAS_DELAY = false
SEND_TIME_RT = 18:55:21.224+00:00
}

关于linux - 删除满足条件的代码块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55652140/

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