Вложенные циклы для сравнения двух CSV в Powershell и удаления дубликатов

Я пытаюсь сравнить два CSV, а затем удалить целые объекты из одного, если имя строки совпадает с другим. Прямо сейчас я устанавливаю его равным переменной $test для проверки. Первая линия работает; Я просто включил его для ясности.

#Compare and Output Perfect Matches
    $perfect=compare-object (import-csv $bpa) (import-csv $peak) -Property "Op_Area","Line_Name","From_St","From_Nd","To_St","To_Nd" -IncludeEqual -ExcludeDifferent 
#Remove Perfect Matches from Original Two Lists
    $test=import-csv $peak|%{if($_.line_name -eq $perfect|%{$_.line_name}){Remove-Item}}

Моя конечная цель - найти совпадения между двумя списками (Готово в первой строке), удалить их из обоих, затем переключить несколько строк и найти второй набор совпадений.


person Errorum    schedule 20.07.2016    source источник


Ответы (1)


Используйте Select-Object -ExpandProperty Line_Name, чтобы получить только Line_Name значений из совпадающих записей:

# Store the $peak csv in a variable, we'll need it later
$peakData = Import-Csv $peak
$perfect = Compare-Object (Import-Csv $bpa) $peakData -Property "Op_Area","Line_Name","From_St","From_Nd","To_St","To_Nd" -IncludeEqual -ExcludeDifferent |Select-Object -ExpandProperty Line_Name

Затем используйте Where-Object, чтобы отфильтровать эти строки:

$test = $peakData |Where-Object { $perfect -notcontains $_.Line_Name }
person Mathias R. Jessen    schedule 20.07.2016