在解析阶段使用基于包含的数据的条件替换XML中的字段名称

时间:2015-02-18 10:02:07

标签: splunk

我在Splunk Answers上没有运气,所以我在这里发帖。

无法想出这一点,任何帮助表示赞赏。数据很敏感,但我会尽量清楚。

我有一个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 = AFIELD3替换为FIELD99

如果FIELD1 = BFIELD4替换为FIELD37

等...

我尝试使用props.conf中的[rule::blabla]节来分配不同的源类型。但原始数据中都存在AB

这是我的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

帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

您可以在props.conf中执行此操作,如下所示:

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

如果这比您描述的要复杂一点,您可能需要使用CASE语句。您可以在搜索栏上使用eval来测试结果,然后再将其集成到props.conf中。