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

如何用Shell脚本提取多日志文件指定块并排序输出到结果文件

用Shell脚本筛选并排序指定Unique ID的日志块

我来帮你搞定这个日志处理的需求,用Shell脚本就能轻松实现,下面是具体的方案和解释:

解决方案脚本

直接运行这个脚本就能生成符合要求的C.txt:

#!/bin/bash

# 提取目标Unique ID的日志块并添加排序键
awk '
/##Start/ {
    block_start = $0
    capture = 1
    block_content = block_start "\n"
    next
}
capture {
    block_content = block_content $0 "\n"
    if (/Unique ID - ABC123/) {
        keep_block = 1
    }
    if (/##End/) {
        if (keep_block) {
            # 提取起始行的时间作为排序依据,用|分隔键和内容
            print substr(block_start, 1, 23) "|" block_content
        }
        capture = 0
        keep_block = 0
    }
}
' A.txt B.txt | sort -t "|" -k1,1 | cut -d "|" -f2- > C.txt

脚本工作原理拆解

咱们一步步看这个脚本是怎么干活的:

  1. awk块捕获与筛选:
    • 当匹配到##Start时,开启块捕获模式,记录块的起始行,初始化块内容变量。
    • 在捕获模式下,把每一行内容追加到块里;如果遇到Unique ID - ABC123,标记这个块需要保留。
    • 当匹配到##End时,如果块被标记为保留,就把块的起始时间(前23个字符,对应日志的时间格式)作为排序键,用|和块内容拼接后输出。
  2. 排序处理:
    • 用sort命令以|为分隔符,按第一列的时间字符串排序(你的日志时间格式可直接按字符串排序,能保证时间顺序)。
  3. 生成最终文件:
    • 用cut命令去掉前面的排序键和分隔符,只保留纯净的日志块内容,输出到C.txt。

扩展说明

如果你的日志文件不止A.txt和B.txt,比如有一堆*.txt格式的日志,只需要把脚本里的A.txt B.txt换成*.txt就行,脚本会自动处理所有符合条件的文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:44:22