首页 > 解决方案 > 排序对象问题(一个 MAC 地址和两个 IP 地址)

问题描述

我有一个input.csv文件,里面是例如:

MAC:00-1A-4B-2E-FF-04 IP:10.3.100.62
MAC:00-1A-4B-2E-FF-04 IP:10.14.21.11

MAC:00-1B-78-15-FE-58 IP:10.14.6.24
MAC:00-1B-78-15-FE-58 IP:10.3.128.57

MAC:00-01-E6-35-68-88 IP:10.14.23.15
MAC:00-1B-78-21-AC-36 IP:10.3.88.59

我需要使用Sort-Object MAC -Uniqueoutput.csv想要:

MAC:00-1A-4B-2E-FF-04 10.14.21.11
MAC:00-1B-78-15-FE-58 10.14.6.24

00-01-E6-35-68-88 IP:10.14.23.15
00-1B-78-21-AC-36 IP:10.3.88.59

很简单,如果一个 MAC 地址有两个 IP 地址,我总是只需要一个唯一的组合,但总是以 . 开头的 IP 地址10.14.*.*

我试试这个:

$getFile = Get-Content $file |
           ConvertFrom-Csv -Delimiter ";" -Header "Tiskarna", "Model", "MAC", "IP_adresa", "ID_terminalu" |
           Sort-Object -Property MAC, IP_adresa |
           ConvertTo-Csv -NoTypeInformation |
           % {$_.Replace('"','')} |
           Select-Object -SkipLast 1

标签: powershell

解决方案


假设您的首选 IP10.14.总是首先排序,请使用Group-Object

# simulating Import-Csv input.csv  
$Csv = @"
00-1A-4B-2E-FF-04;10.3.100.62
00-1A-4B-2E-FF-04;10.14.21.11
00-1B-78-15-FE-58;10.14.6.24
00-1B-78-15-FE-58;10.3.128.57
00-01-E6-35-68-88;10.14.23.15
00-1B-78-21-AC-36;10.3.88.59
"@ -split '\r?\n' | ConvertFrom-Csv -Delimiter ';' -Header MAC,IP

$Output = $Csv | Group-Object Mac | ForEach { 
  $_.Group | Sort-Object IP | Select-Object -First 1 
}

$Output

在这里产生:


MAC               IP
---               --
00-1A-4B-2E-FF-04 10.14.21.11
00-1B-78-15-FE-58 10.14.6.24
00-01-E6-35-68-88 10.14.23.15
00-1B-78-21-AC-36 10.3.88.59

推荐阅读