我有两个csv文件,列如下
Csv1
Name| address| phone
John| Blah | Blah
Dave| Blah | Blah
Rick| Blah | Blah
Csv2
Name |address| phone
John| Blah| Blah
Dave| Blah| Blah
我想要第一个csv中的唯一行
我想要什么
Name | address| phone
Rick | Blah | Blah
我的代码
$csv1 = import-csv <file> $csv2 = import-csv <file>
$output = $csv1 | where-object {$_.name -notin $csv2.Name -and $_.address -notin $csv2.address -and $_.phone -notin $csv2.phone}
您的声明| where-object {$_.name -notin $csv2.Name -and $_.address -notin $csv2.address -and $_.phone -notin $csv2.phone}
评估Rick的行时的逻辑
里克的名字在$Csv2
中吗?(回答:没有(
$Csv2
中的地址吗?(回答:是($Csv2
的电话号码吗?(回答:是(您正在根据$csv2
的所有行评估每一行,所以当您检查Rick的地址($_.address -notin $csv2.address
(时,它实际上在$Csv2
中用于John和Dave。根据您制定条件的方式,这确实将Rick从唯一的行中删除。
您可以使用"比较对象"来比较两个csv文件并查找不匹配的项目。下面是一个使用3个属性作为标准对两个csv进行比较的演示。
Compare-Object -ReferenceObject $csv1 -DifferenceObject $csv2 -Property Name,Address,phone | Where-Object SideIndicator -eq '<='
完整的独立示例
$Csv1 = @'
Name|address|phone
John|Blah|Blah
Dave|Blah|Blah
Rick|Blah|Blah
'@ | ConvertFrom-Csv -Delimiter '|'
$csv2 = @'
Name|address|phone
John|Blah|Blah
Dave|Blah|Blah
'@ | ConvertFrom-Csv -Delimiter '|'
$Results = Compare-Object -ReferenceObject $csv1 -DifferenceObject $csv2 -Property Name,Address,phone | Where-Object SideIndicator -eq '<='
$Results | Select Name,Address,Phone
输出
Name Address phone
---- ------- -----
Rick Blah Blah