You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于时间戳合并嵌套表格中的同请求AWS日志行?

合并同时间戳的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                                                                                     │ │
│     │ ╰───┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│   2 │ ╭───┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│     │ │ 0 │ 2023-09-22 17:44:11.024                                                                                                        │ │
│     │ │ 1 │ INFO:     10.0.0.30:47184 - "GET ..." 500                                                                                      │ │
│     │ ╰───┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │

期望合并效果

╭─────┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│   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                                                                                      │ │
│     │ ╰───┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │

实现方案

手动修改效率太低,用Python脚本批量处理最省心,核心逻辑是先按时间戳对日志分组,再重新生成符合格式的嵌套日志。

示例脚本

def merge_aws_logs(raw_log_lines):
    timestamp_map = {}
    current_ts = ""
    # 解析原始日志,提取时间戳和对应日志内容
    for line in raw_log_lines:
        if "│ 0 │" in line:
            # 提取时间戳
            current_ts = line.split("│ 0 │")[1].strip()
        elif "│ 1 │" in line:
            # 提取日志内容
            log_content = line.split("│ 1 │")[1].strip()
            if current_ts not in timestamp_map:
                timestamp_map[current_ts] = []
            timestamp_map[current_ts].append(log_content)
    
    # 生成合并后的日志内容
    merged_lines = []
    # 外层表格表头
    merged_lines.append("╭─────┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮")
    outer_idx = 0
    for ts, logs in timestamp_map.items():
        # 外层表格行开头
        merged_lines.append(f"│   {outer_idx} │ ╭───┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │")
        # 写入时间戳行
        merged_lines.append(f"│     │ │ 0 │ {ts}                                                                                                        │ │")
        # 写入第一条日志
        merged_lines.append(f"│     │ │ 1 │ {logs[0]}                                                                                     │ │")
        # 写入同时间戳的剩余日志
        for log in logs[1:]:
            merged_lines.append(f"|     | |   | {log}                                                                                      │ │")
        # 子表格结尾
        merged_lines.append(f"│     │ ╰───┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │")
        outer_idx += 1
    return merged_lines

# 执行逻辑
if __name__ == "__main__":
    # 读取原始日志文件
    with open("aws_logs.txt", "r", encoding="utf-8") as f:
        raw_lines = [line.rstrip("\n") for line in f]
    # 生成合并日志
    merged_logs = merge_aws_logs(raw_lines)
    # 保存到文件
    with open("merged_aws_logs.txt", "w", encoding="utf-8") as f:
        f.write("\n".join(merged_logs))
    # 打印到控制台
    print("\n".join(merged_logs))

使用步骤

  1. 把原始日志保存成aws_logs.txt,和脚本放在同一目录
  2. 运行脚本,会自动生成merged_aws_logs.txt,里面就是按需求合并好的日志
  3. 脚本会自动识别时间戳相同的日志,把它们合并到同一个子表格的日志行下方,完全匹配你要的格式

内容的提问来源于stack exchange,提问作者Howins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 22:05:02