我需要能够比较IP子网的2行,并告诉如果有重叠。举例来说:在第1行,我有一个/24,我需要检查这个/24是否存在于第2行(例如,通过/24或通过超网/21)所以:
ROW 1: 192.168.2.0/24 ROW 2: 192.168.0.0/21
字符串结果->第1行存在于第2行我不知道如何在Excel中做到这一点。有人知道吗?
bbuxkriu1#
如果你想在powershell中执行此操作,可以使用以下脚本:
Clear-Host #Import csv file with IPs (Delimiter ";") $rowlist = Import-Csv -Path "C:\rows_directory\rowlist.csv" -Delimiter ";" $row1 = $rowlist | Select-Object -ExpandProperty "row1" $row2 = $rowlist | Select-Object -ExpandProperty "row2" foreach($string in $row1) { if($string -in $row2) { Write-Output "ROW1: $string exist in ROW2" } }
字符串我在文件中填写了:
的数据结果是:
ROW1: 123 exist in ROW2
型
tp5buhyn2#
为此,我将创建一个函数来查找相关子网中IP地址的基址(作为UInt32类型):
UInt32
Function Get-IPBase($Address) { $IP, $SubNet = $Address.Split('/', 2) $Bytes = ([IPAddress]$IP).GetAddressBytes() if ([BitConverter]::IsLittleEndian) { [Array]::Reverse($Bytes) } [BitConverter]::ToUInt32($bytes, 0) -BAnd -BNot ([UInt32][Math]::Pow(2, $SubNet) - 1) }
字符串函数返回的内容示例:
Get-IPBase 192.168.2.0/24 3221225472 Get-IPBase 192.168.0.0/24 3221225472
型然后,使用Join-Object script/Join-Object Module进行自连接(另请参见:In Powershell, what's the best way to join two tables into one?):
Join-Object script
Join-Object Module
Import-CSV .\My.csv |Join -On { Get-IPBase $_.Row1 } -Eq { Get-IPBase $_.Row2 }
2条答案
按热度按时间bbuxkriu1#
如果你想在powershell中执行此操作,可以使用以下脚本:
字符串
我在文件中填写了:
的数据
结果是:
型
tp5buhyn2#
为此,我将创建一个函数来查找相关子网中IP地址的基址(作为
UInt32
类型):字符串
函数返回的内容示例:
型
然后,使用
Join-Object script
/Join-Object Module
进行自连接(另请参见:In Powershell, what's the best way to join two tables into one?):型