在一段时间内找到ip next line

时间:2015-07-03 08:58:08

标签: tcl

在" while"我需要验证在lindex位置1的下一行是否在此轮中具有相同的ip。

如果是的话,做一些事,如果不做的话。

ips.txt

169.254.0.1,169.254.1.1
169.254.0.2,169.254.1.1
169.254.0.3,169.254.1.2
169.254.0.4,169.254.1.2

如何使用tcl执行此操作?

感谢。

1 个答案:

答案 0 :(得分:0)

略显简单,但应该做的工作:

set ch [open ips.txt]
set prev {}
while {[chan gets $ch ips] >= 0} {
    lassign [split $ips ,] ipa ipb
    if {$prev ne {}} {
        if {$prev eq $ipb} {
            # do something
        } else {
            # do another thing
        }
    } else {
        # do something with the first line
    }
    set prev $ipb
}
chan close $ch

从内到外:基于prev中的值(前一行的第二个ip地址,如果我们正在读取第一行,则为空字符串)和ipb(第二行)来自当前行的ip地址)是否相等,做“某事”或“另一件事”。该行中的两个IP地址都可以作为ipaipb的值进行处理。

为了确保我们只有在有效地址进行比较时才这样做(请注意,这使您可以选择将prev预设为默认值),此比较包含在{{{ 1}}和空字符串。

在每一行上,在比较任何内容之前,将该行拆分为两个地址并将其存储在$previpa中。比较后,将值ipb复制到ibp,以便在处理下一行时使用。

读取并处理文件中的所有行。

如果无法打开文件进行读取,此脚本将引发错误异常。文件中格式错误的行不应该导致问题,但可能会将prev设置为空字符串。

文档:chaniflassignopensetsplitwhile