如何根据字段的值将表合并到其他表中?

How can I merge table inside an other table base on the value of a field?

提问人:Howins 提问时间:9/25/2023 更新时间:9/26/2023 访问量:51

问:

我有一张这样的表:

╭─────┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│   0 │ ╭───┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│     │ │ 0 │ 2023-09-22 17:49:03.301                                                                                                        │ │
│     │ │ 1 │ INFO:     10.0.0.30:49398 - "GET ..." 200 OK                                                                                   │ │
│     │ ╰───┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│   1 │ ╭───┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│     │ │ 0 │ 2023-09-22 17:44:11.024                                                                                                        │ │
│     │ │ 1 │ INFO:     10.0.2.177:15974 - "GET ..." 404                                                                                     │ │
│     │ ╰───┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│   2 │ ╭───┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│     │ │ 0 │ 2023-09-22 17:44:11.024                                                                                                        │ │
│     │ │ 1 │ INFO:     10.0.0.30:47184 - "GET ..." 500                                                                                      │ │
│     │ ╰───┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │

如果第 1 行的日期相同,如何合并每个单元格的第 0 行? 为了添加更多上下文,它是 AWS 日志的显示,我想合并来自同一请求的行(因此具有相同的时间戳),以便更好地查看日志。

在上面的示例中,我希望有一个新表(或更新的前一个表)来具有如下内容:

╭─────┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│   0 │ ╭───┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│     │ │ 0 │ 2023-09-22 17:49:03.301                                                                                                        │ │
│     │ │ 1 │ INFO:     10.0.0.30:49398 - "GET ..." 200 OK                                                                                   │ │
│     │ ╰───┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│   1 │ ╭───┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│     │ │ 0 │ 2023-09-22 17:44:11.024                                                                                                        │ │
│     │ │ 1 │ INFO:     10.0.2.177:15974 - "GET ..." 404                                                                                     │ │
|     | |   | INFO:     10.0.0.30:47184 - "GET ..." 500                                                                                      │ │
│     │ ╰───┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
nushell的

评论


答:

1赞 pmf 9/25/2023 #1

假设底层数据结构是两个嵌套的字符串数组,如下所示:

[
  ['2023-09-22 17:49:03.301', 'INFO:     10.0.0.30:49398 - "GET ..." 200 OK'], 
  ['2023-09-22 17:44:11.024', 'INFO:     10.0.2.177:15974 - "GET ..." 404'], 
  ['2023-09-22 17:44:11.024', 'INFO:     10.0.0.30:47184 - "GET ..." 500']
]

然后,可以使用 group-by 按输入数组的第一个项目(日期行)对输入数组进行分组,然后使用循环访问这些组,以捕获其分组键(日期)和组合在一起的输入值数组。对于每个,取后者,使用 skip with amout 跳过它们的第一个项目(常见的日期线),然后将它们的内容展平。最后,将捕获的日期后到每个组:01

group-by 0 | items {|date, logs|
  $logs | each {skip 1} | flatten | prepend $date
}
╭───┬──────────────────────────────────────────────────────╮
│ 0 │ ╭───┬──────────────────────────────────────────────╮ │
│   │ │ 0 │ 2023-09-22 17:49:03.301                      │ │
│   │ │ 1 │ INFO:     10.0.0.30:49398 - "GET ..." 200 OK │ │
│   │ ╰───┴──────────────────────────────────────────────╯ │
│ 1 │ ╭───┬────────────────────────────────────────────╮   │
│   │ │ 0 │ 2023-09-22 17:44:11.024                    │   │
│   │ │ 1 │ INFO:     10.0.2.177:15974 - "GET ..." 404 │   │
│   │ │ 2 │ INFO:     10.0.0.30:47184 - "GET ..." 500  │   │
│   │ ╰───┴────────────────────────────────────────────╯   │
╰───┴──────────────────────────────────────────────────────╯