したがって、2つのcsvファイル(list1.csvとlist2.csv)があります。どちらにも次の列があります。
FirstName LastName MiddleName City
List1.csvをチェックして、list2.csvの行と一致する行があるかどうかを確認し、一致する場合はlist1から削除します。
$list1 = import-csv list1.csv
$list2 = import-csv list2.csv
foreach ($item in $list2)
{
$list1 = $list1 | Where {$_.FirstName -ne $item.FirstName -and $_.LastName -ne $item.LastName -and $_.MiddleName -ne $item.MiddleName -and $_.City -ne $item.City}
}
これにより、必要なものに近いリストが得られますが、where句のandステートメントは、各行ではなくlist1全体に適用されるように見えるため、存在すると予想されるいくつかのエントリが削除されます。これを行うにはおそらくもっと良い方法がありますが、私はあまり思いつきません。
$list1 | Where-Object ...
は$list1
のすべての要素を実行するため、foreach
を使用する必要はありません。また、 Compare-Object
コマンドレット を介してCSVを比較することもできます。
$list1 = @(Import-Csv .\list1.csv)
$list2 = @(Import-Csv .\list2.csv)
$list1 = @($list1 | Where-Object {
@(Compare-Object $_ $list2 -Property FirstName,LastName,MiddleName,City -IncludeEqual -ExcludeDifferent).count -eq 0
})