我从测试结果中得到下面的文件,这个文件包含100000或更多的测试用例条目。
文件内容:
Iteration is 1
Testcase is passed
Iteration is 2
Testcase is passed
Iteration is 3
Testcase is passed
Iteration is 4
Testcase is failed
Iteration is 5
Testcase is failed
Iteration is 6
Iteration is 7
Testcase is failed
Iteration is 8
Iteration is 9
Iteration is 10
Testcase is failed
Iteration is 11
Testcase is passed
对于一些测试用例迭代,如6
,8
,9
,缺少判决。这些迭代没有通过或失败之分。
我只是想找出哪个迭代测试用例判决缺失了。
我在gvim中打开文件,并试图找到和删除模式,如Iteration is .*n.*passed
和Iteration is .*n.*failed
,但它没有工作。
谁能建议如何找到没有像
这样的判决的迭代?Iteration is 6
Iteration is 8
Iteration is 9
你可以使用"find"在任何合适的编辑器中使用以下regex:
Iteration is d+nTestcase is w+n
并将匹配项替换为空字符串。
例如,在vim中,假设游标位于文件
的开头:1,$s/Iteration is d+nTestcase is w+n//
可以。
一旦完成,文件将包含没有计数失败/通过结果的行。
您也可以使用相同的策略来编写perl脚本-我把它留给您。
下面是一个简单的Vim解决方案:
:g/passed|failed/norm k2dd
解释:
:g/<pattern>/<command>
对匹配<pattern>
的每一行执行<command>
。passed|failed
是我们的模式。它匹配passed
和failed
的行。将|
视为与passed
或failed
匹配的"或";norm k2dd
是我们的命令。:help :norm
用于在正常模式外执行正常模式命令。我们到了……- 将光标移动到
k
匹配行上方的行, - 删除两行
2dd
,有效地从文件中删除所有通过或失败的测试用例的迭代。
- 将光标移动到
在缓冲区中还剩下以下几行:
Iteration is 6
Iteration is 8
Iteration is 9
,一旦我们有了我们需要的信息,我们可以用u
恢复这个变化。
请尝试以下操作:
awk '
/^Iteration/ {
if (prev) print prev
prev = $0
}
/^Testcase/ {
prev = ""
}
END {
if (prev) print prev
}
' file.txt
结果:
Iteration is 6
Iteration is 8
Iteration is 9
- 变量
prev
保存Iteration
之前的记录。 - 当记录以
Iteration
开始,设置变量prev
时,这意味着最后一个Iteration
记录没有相应的通过/失败记录。 - 当记录以
Testcase
开头时,清空变量prev
END {}
块处理最后一次迭代。