搜索在tcl中定期发生的文本部分

时间:2014-06-23 15:27:02

标签: parsing tcl

我有一个名为log_file的文件,其中包含以下文字:

....some text....

line wire (1)

mode : 2pair , annex : a

coding : abcd

rate : 1024

status : up

....some text....

line wire (2)

mode : 4pair , annex : b

coding : xyz

rate : 1024

status : down

....some text....

值可能不同,但属性始终相同。有没有办法找到每个线路并显示其属性?线路的数量也可能不同。

编辑:文件没有任何空行。有更多属性,但只需要这些属性。我可以像第一个“n”行一样,而不是搜索每一行吗?即如果有线(1),则复制该线加上接下来的4行。

我正在将搜索到的行复制到输出文件$fout,我之前在脚本中使用了相同的$line

1 个答案:

答案 0 :(得分:2)

鉴于你的样本:

set fh [open log_file r]
while {[gets $fh line] != -1} {
    switch -glob -- $line {
        {line wire*} {puts $line}
        {mode : *}   -
        {coding : *} -
        {rate : *}   -
        {status : *} {puts "    $line"}
    }
}
close $fh

输出

line wire (1)
    mode : 2pair , annex : a
    coding : abcd
    rate : 1024
    status : up
line wire (2)
    mode : 4pair , annex : b
    coding : xyz
    rate : 1024
    status : down

编辑:将“线路”行后面的下一行“n”行打印到文件

set in [open log_file r]
set out [open log_file_filtered w]
set n 4
while {[gets $in line] != -1} {
    if {[string match {line wire*} $line]} {
        puts $line
        for {set i 1} {$i <= $n} {incr i} {
            if {[gets $in line] != -1} {
                puts $out "    $line"
            }
        }
    }
}
close $fh