我需要找出文件中包含的所有警告计数。 该行以警告包含警告代码开头。 我用regexp尝试了它,并且可以计算单个警告,但无法获得所有。请解释我在下面执行的算法。
Warning (abc_10) .... <explanation of warning>
Warning (abc_11) .... <explanation of warning>
Warning (abc_10) .... <explanation of warning>
Warning (abc_13) .... <explanation of warning>
Warning (abc_11) .... <explanation of warning>
Warning (abc_10) .... <explanation of warning>
.
.
.
.
Warning (abc_15) .... <explanation of warning>
在输出中我需要以下信息
abc_10 5 (Assuming abc_10 occurred 5 times in a file)
abc_11 2
abc_13 1
abc_15 4
请帮我进一步。
答案 0 :(得分:2)
此脚本使用模式\(([^)]+)
(匹配文字左括号,捕获除右括号外的一个或多个字符集)来捕获警告代码,然后将它们输入到频率数组中(即一个值,每个值是给定键/名称的频率。
unset -nocomplain warnings
set fp [open warning_file.txt]
while {[gets $fp line] >= 0} {
if {[regexp {\(([^)]+)} $line -> key]} {
incr warnings($key)
}
}
close $fp
然后你可以打印数组:
% parray warnings
warnings(abc_10) = 3
warnings(abc_11) = 2
warnings(abc_13) = 1
warnings(abc_15) = 1
文档: >= (operator), close, gets, incr, open, parray, regexp, set, unset, while, Syntax of Tcl regular expressions