Splunk:如何将多行字段拆分为单独的行并最终以表格格式显示

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

我的 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 命令来实现此目的。但是,这没有用。期待建议。

splunk splunk-query
1个回答
0
投票

好吧,这很复杂。步骤是:

  • 将其变成一个名为
    headings
    的领域和一个名为
    lines
  • 的领域
  • rex
    headings
    lines
    转换为称为
    heading
    line
  • 的多值字段
  • heading
    line
    压缩到
    combined
    字段中并 mvexpand
  • rex
    combined
    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 *
© www.soinside.com 2019 - 2024. All rights reserved.