如何找到给定的两个

时间:2015-06-03 05:13:35

标签: tcl

有人能告诉我如何从显示输出中找到具有两个IP地址值的最高IP地址。请帮忙 。  我尝试了以下,是任何其他更好的选择。

set ip1 "10.2.244.255"
set ip2 "10.2.33.224" 
set ip1 [split $ip1 .] 
set ip2 [split $ip2 .] 
foreach i $ip1 j $ip2 {  
    if { $i > $j} {
         puts "ip1 is greater" break 
    } elseif { $i < $j } {
         puts "ip2 is greater" break 
    } elseif { $i == $j } {
         continue 
    }
}

2 个答案:

答案 0 :(得分:2)

一种选择是使用-dictionary的{​​{1}}选项,该选项对字符串中的数字执行正确的操作:

[lsort]

将ip地址从最小到最大排序。所以结果是列表中的最后一个数字。

您可以将其封装在一个函数中:

lsort -dictionary {10.2.244.255 10.2.33.224}

答案 1 :(得分:0)

IP地址只是32位值的人类难忘表示。 tcllib ip package有命令操纵这些,在这种情况下,我认为ip::toInteger最有用。

proc compareIp {addr1 addr2} {
    expr {[ip::toInteger $addr2] - [ip::toInteger $addr1]}
}

应该给出小于,等于或大于比较的通常的负0,正结果。该软件包还将处理网络或地址集的屏蔽地址(即:10.0.1.0/16)。