tcl:使用Regex循环并提取



我有大量数据,我想根据两个条件提取两种类型的数据。我编写了一个tcl脚本,通过使用regex(新手到regex)提取数据。

我使用了以下条件,它工作良好,并产生了部分所需的输出:

if [regexp {+ ([0-9.]+) 1 2.*- } $line -> time ] {

我在脚本的某个地方使用了可变时间。上述条件产生以下o/p(这只是一个示例,因为文件很大):

+ 30.808352 1 2 tcp 40 ------- 30 6.7 2.30 81 2073
+ 30.808416 1 2 tcp 40 ------- 128 8.16 2.159 81 2069
+ 30.809513 1 2 tcp 40 ------- 156 12.19 2.187 1 2077
+ 30.809641 1 2 tcp 80 ------- 156 12.19 2.187 1 2078
+ 30.809878 1 2 tcp 40 ------- 151 7.18 2.182 41 2079
+ 30.813096 1 2 tcp 40 ------- 161 9.20 2.192 0 2083
+ 30.813352 1 2 tcp 40 ------- 157 13.19 2.188 1 2085
+ 30.81348 1 2 tcp 80 ------- 157 13.19 2.188 1 2086
+ 30.815362 1 2 tcp 40 ------- 148 12.18 2.179 41 2088
+ 30.815426 1 2 tcp 40 ------- 148 5.9 2.179 41 2089
+ 30.818096 1 2 tcp 40 ------- 162 10.20 2.193 0 2091
+ 30.818544 1 2 tcp 40 ------- 158 3.78 2.189 1 2093
+ 30.818672 1 2 tcp 80 ------- 158 14.19 2.189 1 2094
+ 30.820657 1 2 tcp 40 ------- 153 9.19 2.184 41 2096
+ 30.821579 1 2 tcp 40 ------- 154 10.19 2.185 41 2097

然后,在上述条件下,我要检查第9列:

//condition 1
if (9th between [3-6].*) ( such as 3.78,6.7, 5.9)

第二个条件是:

  //condition 2
if (9th between [7-14].*) ( such as 14.19,12.18,10.19, 9.19,.....)

我正与上述两种情况作斗争。我尝试了以下操作,但没有出现错误,但没有匹配!!

condition 1:
if [regexp {+ ([0-9.]+) 1 2.*-* ([3-9])..*/ } $line ] {

我知道我在重复主if条件的一部分,因为我不知道如何跳过列!!!

condition 2:
 if [regexp {+ ([0-9.]+) 1 2.*-* ([7-9]|1[0-4])..*/} $line ] {

有什么建议吗!!!

为什么不在空间上拆分?你可以使用更多的线条来获得几乎相同的结果。它将是可读的,人们可以更好地理解代码:

if [regexp {+ ([0-9.]+) 1 2.*- } $line -> time] {
    set elements [split $line " "] ;# You can actually omit the " " in this case
    set 9th [lindex $elements 8]
    # Condition 1
    if {$9th >= 3 && $9th < 7} { do something }
    # Condition 2
    if {$9th >= 7 && $9th < 15} { do something }
}

匹配7-14 + ([0-9.]+) 1 2.*- d+s(?:[7-9]|1[0-4])演示
匹配3-6 + ([0-9.]+) 1 2.*- d+s[3-6]演示

最新更新