Splunk 无法使用多个 x-field 字段

问题描述 投票:0回答:1

我有这样的数据:

_时间 id 值1 值2 值3
2023-02-22 abcde 0 45 23
2023-02-23 abcde 1 4 17
2023-02-22 xyz 1 46 24
2023-02-23 xyz 2 5 18

我想改造它,让它看起来像这样:

_时间 id 值_名称 价值
2023-02-22 abcde 值1 0
2023-02-22 abcde 值2 45
2023-02-22 abcde 值3 23
2023-02-23 abcde 值1 1
2023-02-23 abcde 值2 4
2023-02-23 abcde 值3 17
2023-02-22 xyz 值1 1

...等等。

我尝试使用untable:

| makeresults 
| eval _time="2023-02-22", id="abcde", value1=0, value2=45, value3=23 
| append [| makeresults 
| eval _time="2023-02-23", id="abcde", value1=1, value2=4, value3=17]
| append [| makeresults 
| eval _time="2023-02-22", id="xyz", value1=1, value2=46, value3=24]
| append [| makeresults 
| eval _time="2023-02-23", id="xyz", value1=2, value2=5, value3=18]
| table _time id value1 value2 value3
| untable _time value_name value

但是,这在不同的行上给了我“id”的 value_names。我希望能够为 untable 命令 的 x-field 参数指定多个字段,以便我为 _time 和 id 的每种组合得到一行。

有简单的方法吗?

splunk unpivot
1个回答
0
投票

我以前遇到过这个问题。我发现的最佳解决方案是创建一个临时字段,在您不想转置的每个字段之间使用分隔符。一旦您对结构感到满意,您就可以使用

| rex
命令提取它们。

| eval id_time = _time + "|" + id
| fields id_time, value1, value2, value3
| untable id_time, value_name, value
| rex field=id_time "(?<_time>[^\|]+)\|(?<id>.+)"
| table _time, id, value_name, value

由于您使用的是存储为整数的 _time,因此我选择使用简单的管道作为分隔符。

© www.soinside.com 2019 - 2024. All rights reserved.