求可正确返回非共同值的Splunk查询语句
解决Splunk查询获取两组数据非共同值的问题
你的需求是获取Expected中存在但Actual中不存在的元素,以下是两种可行的解决方案:
方法一:使用setdiff函数(推荐,简洁高效)
Splunk内置的setdiff()函数可以直接返回第一个多值字段中不在第二个多值字段内的元素,完美匹配你的需求:
| makeresults | eval Expected = "Xray,Perform,Report,Hyper" | makemv delim="," Expected | eval Actual = "Xray,Perform" | makemv delim="," Actual | eval Missing = setdiff(Expected, Actual) // 获取Expected独有的元素 | eval Missing = mvjoin(Missing, ",") // 把多值字段合并为逗号分隔的字符串 | table Missing
执行后会直接输出Report,Hyper。
方法二:修改你原有的查询逻辑
你原有的查询已经筛选出了出现次数为1的元素,但缺少将多行结果合并为单个字符串的步骤,修改后如下:
| makeresults | eval Expected = "Xray,Perform,Report,Hyper" | makemv delim="," Expected | eval Actual = "Xray,Perform" | makemv delim="," Actual | eval Combined = mvappend(Expected, Actual) | stats count by Combined | where count=1 | stats values(Combined) as Missing // 将多行结果聚合为多值字段 | eval Missing = mvjoin(Missing, ",") // 合并为逗号分隔的字符串 | table Missing
原查询问题说明
你原查询的核心问题是最后只做了table Combined,会输出两行独立的Report和Hyper,而不是合并后的字符串。通过stats values()聚合再mvjoin()就能得到你需要的格式。
内容的提问来源于stack exchange,提问作者Anil wagh
相关产品推荐
相关产品推荐

