gpt4 book ai didi

regex - 如何使用动态列对日志输出进行 grep

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:13:17 27 4
gpt4 key购买 nike

日志文件:

2015-11-29 02:24:14,053 DEBUG ExcludePostalCodesServiceImpl [messageListenerContainer-38] :88 - Postal Code : 5118 is Excluded for country : AU
2015-11-29 02:24:14,077 INFO BatchExecutionListener [messageListenerContainer-35] :29 - ----------FINISH JOB: shipmentJob, JOB_INSTANCE_ID: 121453924, EXIT_CODE: COMPLETED----------
2015-11-29 02:24:14,054 INFO ShipmentRuleRunnerImpl [messageListenerContainer-38] :83 - Shipment is not selected due to exclusion postal code: [awb=40738xxxxx, shp_acct_no=7612xxxxx, rcvr_name=xxxxx, rcvr_org=CAROLxxx, org_ctry=US, dest_ctry=AU, dest_addr=xxxxxxxx,

假设上面的文件很大。我愿意:

1) grep -B 3 “由于排除邮政编码而未选择发货” xxxx.log - 这是grep我需要的关键字,然后返回前3行

2) 然后,在此示例中,我想过滤掉包含 [messageListenerContainer-38] 的行,以便输出如下所示。请注意,缺少 [messageListenerContainer-35],因为我只想要与第一个关键字 grep 关联的那个。

2015-11-29 02:24:14,053 DEBUG ExcludePostalCodesServiceImpl [messageListenerContainer-38] :88 - Postal Code : 5118 is Excluded for country : AU
2015-11-29 02:24:14,054 INFO ShipmentRuleRunnerImpl [messageListenerContainer-38] :83 - Shipment is not selected due to exclusion postal code: [awb=40738xxxxx, shp_acct_no=7612xxxxx, rcvr_name=xxxxx, rcvr_org=CAROLxxx, org_ctry=US, dest_ctry=AU, dest_addr=xxxxxxxx,

grep -B 3 “由于排除邮政编码而未选择装运” xxx.log | grep [messageListenerContainer-38]

如果标签始终是唯一的,则工作正常,但如果我要从大量日志列表(返回多个结果)中进行 grep,则 xx [messageListenerContainer-xx] 中的数字是动态的。

它也会在一段时间后被重用,因此我必须将 grep -B 限制为 5,以便在相关之前只 grep 一定数量的行。 (日志的性质)

因此,是否可以在某个关键字之前对几行进行 grep,然后进行进一步的过滤以仅获取与第一个 grep 关联的 [messageListenerContainer-xx] 的行?

最佳答案

awk 助您一臂之力!

我认为您正在寻找这样的东西。

$ awk -v n=4      '{p=p%n;a[p++]=$0} 
/search_pattern/{key=$5;
for(i=p;i<p+n;i++)
{line=a[i%n];
if(line ~ key) print line}}' log

X X X X X-38 XXXX
X X X X X-38 XXXX
X X X X X-38 search_pattern

在哪里

$ cat log
X X X X X-35 XXXX
X X X X X-35 XXXX
X X X X X-35 XXXX
X X X X X-38 XXXX
X X X X X-35 XXXX
X X X X X-38 XXXX
X X X X X-38 search_pattern
X X X X XXXX XXX

对于搜索到的模式,回头查找 n 行并打印与键 ($5) 字段相关的行。对于精确匹配,您可以将正则表达式匹配 ~ 更改为等于 ==

关于regex - 如何使用动态列对日志输出进行 grep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33978883/

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