2015-02-18 2 views
0

Мне не повезло в ответах на Splunk, поэтому я публикую здесь.Замена имен полей в XML с использованием условий, основанных на данных, содержащихся внутри - во время фазы синтаксического анализа

Невозможно определить этот вариант, любая помощь оценивается. Данные чувствительны, но я постараюсь быть максимально ясным.

У меня есть данные в виде XML-файлов, который выглядит следующим образом:

<ROW> 
    <FIELD1>A</FIELD1> 
    <FIELD2>randomdata</FIELD2> 
    <FIELD3>randomdata</FIELD3> 
    <FIELD4>randomdata</FIELD4> 
</ROW> 
<ROW> 
    <FIELD1>B</FIELD1> 
    <FIELD2>randomdata</FIELD2> 
    <FIELD3>randomdata</FIELD3> 
    <FIELD4>randomdata</FIELD4> 
</ROW> 

Теперь, некоторые из вас могут признать это как XML с кодировкой пошло не так.

Я индексировали эти данные с удовольствием, используя команду SEDCMD и заменил &lt; и &gt; с < и >, чтобы сделать его доступным для чтения XML. Каждый ROW - это новое событие, но несколько из них содержатся в одном файле XML.

Сложный вопрос ... Я хочу изменить FIELDS2,3,4 имена на основе стоимости FIELD1

Итак,

Если FIELD1 = A Заменить FIELD3 с FIELD99

IF FIELD1 = B Заменить FIELD4 с FIELD37

и др.

Я попытался использовать строфу [rule::blabla] в props.conf, чтобы назначить разные источники крови. Но в исходных данных есть как A, так и B.

Вот мой props.conf

[st] 
SHOULD_LINEMERGE=true 
BREAK_ONLY_BEFORE=&lt;ROW&gt; 
NO_BINARY_CHECK=true 
disabled=false 
DATETIME_CONFIG=NONE 
SEDCMD-1=s/&gt;/>/g 
SEDCMD-2=s/&lt;/</g 
MAX_EVENTS=1000 

Помощь оценили!

ответ

0

Вы можете сделать это в props.conf следующим образом:

EVAL-FIELD3 = if(FIELD1==A,FIELD99,FIELD3) 
EVAL-FIELD4 = if(FIELD1==B,FIELD37,FIELD4) 

Если это немного сложнее, чем вы описываете, вам могут понадобиться использовать саз. Вы можете просто использовать eval в строке поиска, чтобы проверить свои результаты перед тем, как интегрировать его в props.conf.

 Смежные вопросы

  • Нет связанных вопросов^_^