如何形成Splunk查询以根据最大分区数将一个字段拆分为多个单独的字段?

时间:2020-04-27 16:48:31

标签: split splunk splunk-query

我的Splunk基本搜索返回了一些如下所示的字符串。

"CN=aa,OU=bb,DC=cc,DC=dd,DC=ee"
"CN=xx,OU=bb,DC=cc,DC=yy,DC=zz"
"CN=ff,OU=gg,OU=hh,DC=ii,DC=jj"
"CN=kk,DC=ll,DC=mm"

注意:CN,OU,DC可以为0或很多。

我的最终目标是找到所有类似以下的OU。
(组合也必须是唯一的。)
(可以排除所有空白行。)
例如:

bb     (blank)
gg      hh
(blank) (blank)

当前正在使用的查询不是很好,并且不是通用查询。
如果我将分割结果中的至少一个分割成5个部分(0、1、2、3、4),它将起作用。 但是,如果我没有将结果分成5个部分(0、1、2、3、4),即所有结果都少于5个部分,它将无法工作并给出空白结果。

index=xx sourcetype=yy
| fields s
| rex field=s mode=sed "s/,DC=.*//g"
| eval temp=split(s,",OU=")
| eval a=mvindex(temp,1)
| eval b=mvindex(temp,2)
| eval c=mvindex(temp,3)
| eval d=mvindex(temp,4)
| dedup a b c d
| table a,b,c,d

如何使其通用,即获取拆分计数并按最大拆分长度制作字段?

1 个答案:

答案 0 :(得分:0)

用于提取这些内容的rex行应类似于following(注意:\w+与字符类“单词”([A-Za-z0-9_])匹配):

| rex field=s max_match=0 "CN=(?<cn>\w+)\,?"
| rex field=s max_match=0 "OU=(?<ou>\w+)\,?"
| rex field=s max_match=0 "DC=(?<dc>\w+)\,?"

这应该在每个事件中为所有cndcou条目创建多值字段

然后您可以split将它们needed分开,例如:

| eval cn=split(cn,"split string")
相关问题