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

如何按测试用例名称命名csplit分割后的日志文件

按测试用例名称分割log文件的解决方案

你可以用awk直接完成这个需求,不需要依赖sed+csplit的组合,它能在处理文件时动态提取测试用例名称并生成对应命名的文件,一步到位。

基础命令实现

直接在终端运行以下命令即可:

awk '
/START_TEST_CASE/ {
    # 提取测试用例名称(适配"START_TEST_CASE tst_T01-TC02"这类格式)
    match($0, /START_TEST_CASE ([^ ]+)/, case_arr)
    filename = case_arr[1] ".log"
    print "正在处理测试用例:" filename > "/dev/stderr"
}
/START_TEST_CASE/,/END_TEST_CASE/ {
    # 将当前测试用例的内容写入对应文件
    print >> filename
}
END {
    print "所有测试用例分割完成。" > "/dev/stderr"
}' test.log

命令细节说明

  1. 提取测试用例名称:

    • 用match()函数通过正则捕获START_TEST_CASE后面的名称部分,([^ ]+)匹配空格前的所有字符;如果你的行格式是START_TEST_CASE: 带空格的名称,可以把正则改成START_TEST_CASE: (.+)来适配。
    • 生成的文件名格式为测试用例名称.log。
  2. 写入对应文件:

    • 使用范围模式/START_TEST_CASE/,/END_TEST_CASE/匹配整个测试用例块,将每行内容追加到对应文件(用>>是追加逻辑,若要覆盖已有同名文件,改成>即可)。
    • 输出到/dev/stderr的内容是终端提示信息,不会混入分割后的log文件。

特殊情况处理

如果测试用例名称包含空格、斜杠、冒号等特殊字符,会导致文件创建失败,可以在生成文件名时替换这些字符:

awk '
/START_TEST_CASE/ {
    match($0, /START_TEST_CASE ([^ ]+)/, case_arr)
    filename = case_arr[1] ".log"
    # 将特殊字符替换为下划线,避免文件创建错误
    gsub(/[\/: ]/, "_", filename)
    print "正在处理测试用例:" filename > "/dev/stderr"
}
/START_TEST_CASE/,/END_TEST_CASE/ {
    print >> filename
}
END {
    print "所有测试用例分割完成。" > "/dev/stderr"
}' test.log

对比原方法的优势

原csplit只能按分割位置生成编号文件,无法直接关联测试用例名称;而awk可以在处理每个测试用例块时动态获取名称,直接生成符合需求的命名文件,流程更简洁,省去了后续手动重命名的步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:35:26