set fr [open "x.txt" r]
set fw [open "y.txt" w]
set myRegex {^([0-9]+) ([0-9:]+\.[0-9]+).* ABC\.([a-zA-Z]+)\[([0-9]+)\] DEF\(([a-zA-Z]+)\) HIJ\(([0-9]+)\) KLM\(([0-9\.]+)\) NOP\(([0-9]+)\) QRS\(([0-9]+)\)}
while { [gets $fr line] >= 0 } {
if { [regexp $myRegex $line match x y w z]} {
if { [expr $D >> 32] == [lindex $argv 0]} {
puts $fw "$x"
}
}
}
close $fr $fw
上面的 tcl 代码需要永远(32 秒或更长时间)才能执行。在 perl 中执行基本相同的操作只需 3 秒或更短的时间。我知道 perl 对于某些正则表达式的性能更好,但相比之下,tcl 的性能真的会这么差吗?差10倍以上?
顺便说一句,我正在使用 TCL 8.4
以下是使用正则表达式和相同正则表达式的简化版本运行上述代码的指标
32s is the time taken for the above code to execute
22s after removing: QRS\(([0-9]+)\)
17s after removing: NOP\(([0-9]+)\) QRS\(([0-9]+)\)
13s after removing: KLM\(([0-9\.]+)\) NOP\(([0-9]+)\) QRS\(([0-9]+)\)
9s after removing: HIJ\(([0-9]+)\) KLM\(([0-9\.]+)\) NOP\(([0-9]+)\) QRS\(([0-9]+)\)
6s after removing: DEF\(([a-zA-Z]+)\) HIJ\(([0-9]+)\) KLM\(([0-9\.]+)\) NOP\(([0-9]+)\) QRS\(([0-9]+)\)}