如何解决遵循 Eval Case 函数的 Splunk 序列
Spunk 如何优先处理条件 case 函数?假设我有一个带有 2 个条件的 case 函数 - 它们工作正常,结果符合预期,但可以说我翻转了条件。当我翻转 case 函数中的条件时,我看到的结果是不正确的。即使我已经翻转了条件,Splunk 不应该仍然能够检查它适用于哪个条件吗?下面的例子:
案例: TimeSchedule 应该输出最接近的第 7 分钟或第 37 分钟 - 因此,从 zipTime_epoch 开始的第 7 分钟或第 37 分钟之后每半小时输出一次。
工作正常,因为输出 TimeSchedule 应该是 2021-03-06 23:37:59.000000
| makeresults
| eval zipTime="2021-03-06 23:35:59.000"
| eval zipTime_epoch=strptime(zipTime,"%Y-%m-%d %H:%M:%S.%6N")
| eval lastunzip_hour=tonumber(strftime(zipTime_epoch,"%H"))
| eval lastunzip_min=tonumber(strftime(zipTime_epoch,"%M"))
| eval lastunzip_sec=round(zipTime_epoch%60,6)
| eval TimeSchedule=strftime(case(lastunzip_min%30 < 7,zipTime_epoch-
zipTime_epoch%1800+420+lastunzip_sec,lastunzip_min!=37 AND lastunzip_min!=7,zipTime_epoch-zipTime_epoch%1800+2220+lastunzip_sec,1=1,zipTime_epoch),"%Y-%m-%d %H:%M:%S.%6N")
当条件中的大小写翻转时不起作用 - 输出应为 2021-03-06 23:37:59.000000。
| makeresults
| eval zipTime="2021-03-06 23:35:59.000"
| eval zipTime_epoch=strptime(zipTime,6)
| eval TimeSchedule=strftime(case( lastunzip_min!=37 AND lastunzip_min!=7,zipTime_epoch-
zipTime_epoch%1800+2220+lastunzip_sec,lastunzip_min%30 < 7,zipTime_epoch_epoch- zipTime_epoch_epoch%1800+420+lastunzip_sec,"%Y-%m-%d %H:%M:%S.%6N")
| table TimeSchedule,zipTime,lastunzip_hour,lastunzip_min,lastunzip_sec,zipTime_epoch
解决方法
case
函数按照给定的顺序评估每个案例。第一个评估为 true
的是那个占上风。
在示例中,lastunzip_min 是 35。35%30 是 5。35 既不是 37 也不是 7 且 5case 函数中的两个条件都为真,因此处理顺序很重要。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。