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

AWK多搜索模式结合状态机实现测试用例统计报错求助

AWK脚本语法修复与测试用例迭代统计实现

核心需求实现说明

我们需要实现基于Test#分组,统计每个测试用例下各Iteration的有效行数(以下示例中定义有效行为不含Invalid关键词的非标题行,可按需调整),同时修复状态机模式下的常见语法错误。

修复后的完整AWK脚本

BEGIN {
    state = 0  # 0=初始状态, 1=已进入测试用例, 2=已进入迭代
    valid_count = 0
}

# 匹配测试用例标题行
/^Test#/ {
    # 输出上一个测试用例的最后一个迭代统计(如果存在)
    if (state == 2) {
        printf "Iteration %d: %d valid lines\n", curr_iter, valid_count
        valid_count = 0
    }
    curr_test = $0
    print curr_test
    state = 1
    next
}

# 匹配迭代标题行
/^Iteration/ {
    # 输出上一个迭代的统计(如果存在)
    if (state == 2) {
        printf "Iteration %d: %d valid lines\n", curr_iter, valid_count
        valid_count = 0
    }
    curr_iter = $2
    state = 2
    next
}

# 统计有效行:仅在迭代状态下,排除含Invalid的行
state == 2 && !/Invalid/ {
    valid_count++
}

END {
    # 输出最后一个迭代的统计结果
    if (state == 2) {
        printf "Iteration %d: %d valid lines\n", curr_iter, valid_count
    }
}

关键修复点与逻辑说明

  • 状态机逻辑修正:通过state变量明确当前所处阶段(初始/测试用例/迭代),避免多模式匹配冲突,这是常见语法错误的核心来源
  • 边界场景处理:切换测试用例或迭代时,主动输出上一个区块的统计结果,避免遗漏最后一组数据
  • 规则隔离:在匹配Test#和Iteration行后使用next,确保该行不会被后续规则重复处理

使用示例

输入文件示例(input.txt)

Test#1: Login Function
Iteration 1
Valid line 1
Invalid line (skip)
Valid line 2
Iteration 2
Valid line 3
Test#2: Payment Function
Iteration 1
Valid line 4
Test#3: Empty Test Case

运行命令

awk -f test_stats.awk input.txt

输出结果

Test#1: Login Function
Iteration 1: 2 valid lines
Iteration 2: 1 valid lines
Test#2: Payment Function
Iteration 1: 1 valid lines
Test#3: Empty Test Case

常见语法错误排查

  1. 未初始化状态变量:导致初始阶段逻辑混乱,需在BEGIN区块中初始化state、valid_count等变量
  2. 未使用next跳过后续匹配:同一行被多个规则处理,引发统计错误,需在标题行匹配规则后添加next
  3. 格式符不匹配:printf中格式符与变量类型不符(如用%s处理数字),需确保%d对应整型变量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 18:33:27