提问人:H22 提问时间:11/7/2023 更新时间:11/7/2023 访问量:28
Splunk - 使用正则表达式和聚合从搜索结果中提取
Splunk - Extracting from search results using regex and aggregates
问:
我有以下搜索:
my search | eval LINE=(MESSAGE) | where MESSAGE LIKE "Process : Hp:%"
| stats values(DATETIME) as Date values(LINE) as Status
该搜索为我提供了以下结果:
Date Status
2023-10-31 Process : Hp: N1 - NOEAST WorkId: 9 Numbers: 209 Cases: 224 Lines: 465
2023-10-31 Process : Hp: N1 - NOEAST WorkId: 9 Numbers: 499 Cases: 577 Lines: 954
2023-11-02 Process : Hp: N2 - NOEAST WorkId: 13 Numbers: 178 Cases: 230 Lines: 376
2023-11-03 Process : Hp: N2 - NOEAST WorkId: 13 Numbers: 466 Cases: 497 Lines: 725
2023-11-03 Process : Hp: O1 - SOWEST WorkId: 11 Numbers: 182 Cases: 275 Lines: 619
我需要进一步提取才能获得以下结果:
HP Total Numbers Total Cases Total Lines
N1 - NOEAST 9 708 801 1419
N2 - NOEAST 13 644 727 1101
O1 - SOWEST 11 182 275 619
是否可以使用子搜索和正则表达式来获取我必须加在一起的字符串部分的索引来获得我想要的结果?如果是这样,有人可以给我举个例子来开始吗?或者有没有一种更简单的方法可以一起完成这一切?
答:
1赞
Terentiy Gatsukov
11/7/2023
#1
您可以通过在正则表达式中使用带有命名捕获组的命令来提取必要的字段。之后,您可以使用 stats 命令来增加数字、案例和行,并按 HP 字段对它们进行分组,该字段表示 和 的组合。rex
sum
location
WorkId
my search | where MESSAGE LIKE "Process : Hp:%"
| rex field=MESSAGE "Process : Hp: (?<HP>\w+\s-\s\w+)\sWorkId:\s(?<WorkId>\d+)\sNumbers:\s(?<Numbers>\d+)\sCases:\s(?<Cases>\d+)\sLines:\s(?<Lines>\d+)"
| stats sum(Numbers) as "Total Numbers", sum(Cases) as "Total Cases", sum(Lines) as "Total Lines" by HP, WorkId
| eval HP=HP." ".WorkId
| fields - WorkId
评论