Так что есть несколько способов добраться до желаемой точки ... Мне несколько любопытно, что поиск привел вас к исходной точке, так как могут быть некоторые лучшие варианты, где вы можете достичьваш желаемый результат без промежуточной точки, как я покажу здесь ...
Сначала я собираюсь дать вам базовый поиск, с которым я буду работать ... Это создает макетнабор данных на основе вашего, но без агрегации.
| makeresults
| eval raw=split("10.10.2016 05:55 SuffixA=17
10.10.2016 05:57 SuffixA=15
10.10.2016 05:55 SuffixB=16
10.10.2016 05:59 SuffixB=12
10.10.2016 06:01 SuffixB=11
10.10.2016 06:03 SuffixC=9
10.10.2016 06:05 SuffixC=18
10.10.2016 06:09 SuffixC=21","
")
| mvexpand raw | rename raw -> _raw
| rex "^(?<_time>\S+\s+\S+)" | eval _time=strptime(_time,"%m.%d.%Y %H:%M")
| kv | table _time Suffix*
Отсюда у меня есть только суффиксы и их соответствующие значения в определенных точках данных.Чтобы вычислить агрегации по суффиксу, было бы удобно, если бы я мог преобразовать это в ключ (являющийся конкретным используемым суффиксом) и значение ... что для меня сделает нестабильный .(Для любопытных противоположное направление - это, конечно, xyseries )
<base search> | untable _time key value
Теперь мне просто нужно выполнить агрегацию по ключу, в среднем по вашему случаю.И я хочу сохранить все исходные строки в исходном наборе данных, так что именно здесь eventstats было бы удобно
<base search> | untable _time key value
| eventstats avg(value) as average by key
Теперь у меня есть вывод _time, key, value, средний.Затем, чтобы вернуть ваши отдельные столбцы суффиксов, я могу использовать синтаксический трюк eval и назначить поле с именем для значения другого поля, а также использовать fields , чтобы удалить ненужные теперь поля,
<base search> | untable _time key value
| eventstats avg(value) as average by key
| eval {key}=value | fields - key value
После вышеупомянутого эксперимента давайте воспользуемся некоторыми из вышеперечисленных приемов, чтобы выполнить новый базовый поиск, соответствующий вашему текущему состоянию выше.
| makeresults | eval raw=split("10.10.2016 05:55 SuffixA=17
10.10.2016 05:57 SuffixA=15
10.10.2016 05:55 SuffixB=16
10.10.2016 05:59 SuffixB=12
10.10.2016 06:01 SuffixB=11
10.10.2016 06:03 SuffixC=9
10.10.2016 06:05 SuffixC=18
10.10.2016 06:09 SuffixC=21","
") | mvexpand raw | rename raw -> _raw
| rex "^(?<_time>\S+\s+\S+)" | eval _time=strptime(_time,"%m.%d.%Y %H:%M")
| kv | table _time Suffix* | untable _time key value
| eventstats avg(value) as average by key
| eval {key}=value, StaticPart:{key}=average | fields - key value average
| table _time StaticPart:* Suffix*
с этой точкидругим вариантом может быть использование foreach для запуска eval во всех полях StaticPart: * для создания нового среднего поля и удаления всех полей StaticPart, например:
<base search>
| foreach StaticPart:* [eval average=coalesce('<<FIELD>>',average)]
| fields - StaticPart:*