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
常见语法错误排查
- 未初始化状态变量:导致初始阶段逻辑混乱,需在
BEGIN区块中初始化state、valid_count等变量 - 未使用
next跳过后续匹配:同一行被多个规则处理,引发统计错误,需在标题行匹配规则后添加next - 格式符不匹配:
printf中格式符与变量类型不符(如用%s处理数字),需确保%d对应整型变量
内容的提问来源于stack exchange,提问作者user3285014
相关产品推荐
相关产品推荐

