我的 Splunk 字段包含多行数据(在双引号之间),我需要将它们分成单独的行,最后将它们提取到每个标题的表格格式中。基本上,要求是以表格形式向用户报告这些数据。
输出 =“DbName|CurrentSizeGB|UsedSpaceGB|FreeSpaceGB|ExtractedDate abc|60.738|39.844|20.894|2023 年 9 月 5 日上午 10:00 def|0.098|0.017|0.081|2023 年 9 月 5 日上午 10:00 pqr|15.859|0.534|15.325|2023 年 9 月 5 日上午 10:00 xyz|32.733|0.675|32.058|2023 年 9 月 5 日上午 10:00"
我尝试使用 rex 和 multikv 命令来实现此目的。但是,这没有用。期待建议。
好吧,这很复杂。步骤是:
headings
的领域和一个名为 lines
headings
和 lines
转换为称为 heading
和 line
heading
和 line
压缩到 combined
字段中并 mvexpandcombined
到 key
和 value
,然后创建动态字段并将它们全部统计回一个事件将其变成一个名为
headings
的领域和一个名为 lines
的领域
| rex " *(?<headings>[^|]+\|[^|]+\|[^|]+\|[^|]+\|[^|]+)(?= [^|]+\|)"
| rex max_match=0 " *(?<lines>[^|]+\|[^|]+\|[^|]+\|[^|]+\|[^|]+)(?= [^|]+\|)"
| mvexpand lines
| where lines!=headings
| table headings lines
rex
headings
和 lines
转换为称为 heading
和 line
的多值字段
| rex max_match=0 field=lines "(?<line>[^\|]+)"
| rex max_match=0 field=headings "(?<heading>[^\|]+)"
| table heading line
将
heading
和 line
压缩到 combined
字段中并 mvexpand
| streamstats count as event_no
| eval combined=mvzip(heading,line)
| mvexpand combined
| table combined event_no
rex
combined
到 key
和 value
,然后创建动态字段并将它们全部统计回一个事件
| rex field=combined "(?<key>[^,]*),(?<value>.*)"
| eval {key}=value
| stats values(*) as * by event_no
| fields - key value event_no
| table *
这是一个随处运行的示例:
| makeresults
| eval _raw="DbName|CurrentSizeGB|UsedSpaceGB|FreeSpaceGB|ExtractedDate abc|60.738|39.844|20.894|Sep 5 2023 10:00AM def|0.098|0.017|0.081|Sep 5 2023 10:00AM pqr|15.859|0.534|15.325|Sep 5 2023 10:00AM xyz|32.733|0.675|32.058|Sep 5 2023 10:00AM"
| rex " *(?<headings>[^|]+\|[^|]+\|[^|]+\|[^|]+\|[^|]+)(?= [^|]+\|)"
| rex max_match=0 " *(?<lines>[^|]+\|[^|]+\|[^|]+\|[^|]+\|[^|]+)(?= [^|]+\|)"
| mvexpand lines
| where lines!=headings
| table headings lines
| rex max_match=0 field=lines "(?<line>[^\|]+)"
| rex max_match=0 field=headings "(?<heading>[^\|]+)"
| table heading line
| streamstats count as event_no
| eval combined=mvzip(heading,line)
| mvexpand combined
| table combined event_no
| rex field=combined "(?<key>[^,]*),(?<value>.*)"
| eval {key}=value
| stats values(*) as * by event_no
| fields - key value event_no
| table *