下面是我的文本文件的具体内容,文件名是:DTMF_CHIP_postCTS.summary
------------------------------------------------------------
optDesign Final Summary
------------------------------------------------------------
+--------------------+---------+---------+---------+
| Setup mode | all | reg2reg | default |
+--------------------+---------+---------+---------+
| WNS (ns):| 0.158 | 2.609 | 0.158 |
| TNS (ns):| 0.000 | 0.000 | 0.000 |
| Violating Paths:| 0 | 0 | 0 |
| All Paths:| 228 | 219 | 9 |
+--------------------+---------+---------+---------+
我要写一个tcl脚本来抓取文件中的WNS行里的reg2reg列和default列的值。
脚本如下:
set fp [open DTMF_CHIP_postCTS.summary r]
set content [read $fp]
regexp -line {.*WNS.*([0-9]\.[0-9]+).*([0-9]\.[0-9]+).*([0-9]\.[0-9]+)} $content a b c d
puts "WNS\nreg2reg:$c\ndefault:$d"
运行结果如下:
WNS
reg2reg:2.609
default:0.158
解析:
我们首先需要新建一个文件,然后把脚本打上去,保存,我这里保存为script.tcl。
回到存放脚本的目录,在该目录下打开linux终端,输入:
tclsh script.tcl
就可以运行这个tcl脚本了。如果你的linux系统还没有tcl引擎,那自己装一个。
第一行,open是用来打开文件的
第二行,read是用来读取打开的文件内容并赋值给我自定义的content变量的。
第三行,regexp是正则表达式,格式可以参考:Tcl正则命令之regexp__荣耀之路_的博客-CSDN博客_regexp tcl
-line 多行匹配;
{ }里的就是匹配模式,这里可以简单地看成{ ( ) ( ) ( ) }的结构,记住这里面有三个小括号,表示三个单独的匹配模式;
$content 就是刚刚那个文件里的所有内容,现在是字符串的格式;
a b c d 是模式匹配的层级,这个名称是自己定的,a 是0级,也就是总的,满足大括号的匹配,b是1级,左数第一个小括号里面的模式,c、d一次类推。
第四行,我们要的数据在c和d的匹配模式中,所以最后打印c和d的内容。