вложенный цикл if в splunk

#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. Спасибо! Извините за поздний ответ; это делает свою работу