所以我有两个 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,而不是每一行,所以它会删除一些我期望存在的条目。可能有更好的方法可以做到这一点,但我想不出太多。
答案1
$list1 | Where-Object ...
将遍历 的每个元素$list1
,因此无需使用foreach
。此外,您还可以通过Compare-Object
命令:
$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
})