#if-statement #nested-loops #splunk #splunk-query
Вопрос:
Я хотел бы написать в splunk вложенный цикл if: чего я хочу достичь
if buyer_from_France: do eval percentage_fruits if percentage_fruits> 10: do summation if summation>20: total_price if total_price>$50: do(trigger bonus coupon)
Мой текущий код (который работает):
> | eventstats sum(buyers_fruits) AS total_buyers_fruits by location
> | stats sum(fruits) as buyers_fruits by location buyers
> | eval percentage_fruits=fruits_bought/fruits_sold
> | table fruits_bought fruits_sold buyers
> | where percentage_fruits > 10
> | sort - percentage_fruits
Как мне завершить синтаксис/выражение для 2-го (суммирование) и, следовательно, 3-го (общая цена), 4-го цикла if (триггер)?
Комментарии:
1. что ты пытаешься сделать?
2. Я хотел бы сделать вложенный цикл if. Например, если (произойдет A: (если произойдет B: (если произойдет C: сделайте D)))
3. Например, если (произойдет A: (если произойдет B: (если произойдет C: сделайте D))). Вам понравится получать самое сокровенное содержимое и манипулировать с ними «функциями D». Я знаю, что python может, но не могу найти синтаксис для splunk вложенных if.
4. Я понимаю, о чем вы спрашиваете, но вы не сказали, что пытаетесь сделать 🙂 SPL не делает «петли». Близким [достаточно] аналогом является то, что каждая строка в SPL похожа на одну команду в bash (отсюда разделитель каналов между командами). IOW, SPL является чисто линейным в обработке. Используйте несколько условий
eval..if
, как я указал в своем ответе ниже.
Ответ №1:
SPL не делает «петли». Близким [достаточно] аналогом является то, что каждая строка в SPL похожа на одну команду в bash (отсюда разделитель каналов между командами). IOW, SPL является чисто линейным в обработке. Используйте eval..if
мультиусловие,подобное этому:
index=ndx sourcetype=srctp
| eval myfield=if(match(fieldA,"someval") AND !match(fieldC,"notthis"),"all true","else val")
Или вот так:
| eval myfield=if(match(fieldA,"someval"),if(match(fieldB,"otherval"),"matched Aamp;B",if(!match(fieldC,"notthis"),"not A amp; not C","else val")))
Если вы сможете лучше объяснить свой вариант использования/конечную цель, мы, вероятно, сможем дать лучшее направление
Комментарии:
1. Спасибо! Извините за поздний ответ; это делает свою работу