TCL - 查找文件中的所有警告计数

时间:2017-08-31 07:40:41

标签: regex tcl

我需要找出文件中包含的所有警告计数。 该行以警告包含警告代码开头。 我用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

请帮我进一步。

1 个答案:

答案 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)closegetsincropenparrayregexpsetunsetwhileSyntax of Tcl regular expressions