如何在Splunk中删除两个Lookup的共同数据并获取表格唯一数据
在Splunk中获取两个Lookup表的唯一数据(差集)
你需要从Misili_OA_Daily(对应look1)中排除与Misili_OA_Changes(对应look2)ip和host同时匹配的记录,获取仅在look1中存在的唯一数据,以下是几种可行的方法:
方法一:优化子查询的匹配条件
你的原查询问题在于默认format会把字段用OR连接,导致误排除单独ip或host匹配的记录。调整子查询的格式,确保ip和host同时匹配才被排除:
| inputlookup Misili_OA_Daily | search NOT [ | inputlookup Misili_OA_Changes | fields ip host # 只保留用于匹配的字段 | format type=subquery # 生成(ip="xxx" AND host="yyy")的匹配条件 ]
方法二:通过左连接过滤匹配记录
用join做左连接,标记匹配项后过滤掉:
| inputlookup Misili_OA_Daily | join type=left ip host [ | inputlookup Misili_OA_Changes | fields ip host | eval matched=1 # 给匹配到的记录打标记 ] | where isnull(matched) # 只保留未匹配的记录 | fields - matched # 移除标记字段
方法三:使用set diff直接求差集
Splunk的set diff命令专门用于获取两个数据集的差集,仅保留第一个数据集中独有的记录:
| set diff [| inputlookup Misili_OA_Daily] [| inputlookup Misili_OA_Changes | fields ip host]
注:set diff会基于两个数据集的共同字段(ip、host)进行匹配,第二个数据集只需保留匹配用的字段即可。
内容的提问来源于stack exchange,提问作者meisam azizi
相关产品推荐
相关产品推荐

