如何只从多值字段中提取匹配字符串,并在SPLUNK查询的新列中显示



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

示例:假设我在下面有多值列1字段,数据由分隔符逗号分隔

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

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

谢谢你的帮助。

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

column2=mvfilter(匹配(column1,"测试"((

| eval column2=split(column1,",") | search column2="*test*"

不起作用,因为split创建了一个多值字段,这是一个包含多个值的单个字段的单个事件。*test*search仍然会找到该事件,即使它包含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, ",")

相关内容

  • 没有找到相关文章

最新更新