用于比较csv行的Powershell脚本



我有两个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中吗?(回答:没有(
  • Blah是$Csv2中的地址吗?(回答:是(
  • Blah是$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
    

    相关内容

    • 没有找到相关文章

    最新更新