0

我正在尝试从多值字段中提取匹配的字符串并显示在另一列中。我尝试了各种选项来通过分隔符拆分字段,然后 mvexpand 然后用户 where/search 来提取这些数据。我试图找出是否有更简单的方法可以做到这一点,而无需在 SPLUNK 查询中遇到所有这些麻烦。

示例:假设我有以下多值 column1 字段,其中数据由分隔符逗号分隔

column1 = abc1,test1,test2,abctest1,mail,send,mail2,sendtest2,new,code,results

我正在使用分隔符拆分此列|eval column2=split(column1,","),并使用 regex/where/search 在此列中搜索数据*test*并返回结果,我能够在其中提取结果但 column1 仍然显示所有值abc1,test1,test2,abctest1,mail,send,mail2,sendtest2,new,code,results ,我想要的是修剪 1 column1仅显示匹配的单词test或显示新column2中的那些条目,这些条目应仅显示此单词test1,test2,abctest1,sendtest2,因为它们仅匹配*test*

我会很感激你的帮助,谢谢。

4

2 回答 2

1

发布此问题后找到答案,它只是使用退出的 mvfilter 函数来提取匹配结果。

column2=mvfilter(匹配(column1,"test"))

于 2020-09-02T01:00:09.043 回答
0
| eval column2=split(column1,",") | search column2="*test*"

不起作用,因为它split创建了一个多值字段,这是一个包含多个值的单个字段的单个事件。searchfor仍然会找到该*test*事件,即使它包含abc1等... 因为至少有一个字段是*test*.

您可以使用mvfilter命令将多值字段缩小到您所关注的事件。

| eval column2=split(column1,",") | eval column2=mvfilter(match(column2,".*test.*"))

除了这种方法,您可以使用正则表达式来提取您需要的内容。

| rex field=column1 max_match=0 "(<?column2>[^,]*test[^,]*)"

无论如何,最后,您需要使用mvjoin将多个值连接到一个字符串中

| eval column2=mvjoin(column2, ",")
于 2020-09-02T01:01:08.700 回答