我有一个名为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
。
答案 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