【问题标题】:Powershell Compare 2 csv files on 2 objects and upload a 3 filePowershell 比较 2 个对象上的 2 个 csv 文件并上传 3 个文件
【发布时间】:2021-11-09 00:48:07
【问题描述】:

我想比较 2 个 csv 文件 test1 和 test2。仅当部门或国家/地区因更改的详细信息而更改时,我才想导出 test3 文件。我有以下代码,但这会比较两个完整的文件,而不仅仅是国家和部门:

Compare-Object -ReferenceObject (Get-Content -Path C:\scripts\test1.csv) -DifferenceObject (Get-Content -Path C:\scripts\test2.csv) -PassThru | Where-Object{ $_.SideIndicator -eq "=>" } |  % { $_ -Replace ',', ";"} | Out-File -FilePath C:\scripts\test3.csv

这是测试1:

这是测试2:

所以 test3 应该和 test2 一样。任何人都知道如何将这两个文件与国家或部门的变化进行比较

【问题讨论】:

  • Compare-Object 有一个-Property 参数,您可以使用它来指定要比较的属性。

标签: powershell csv compare


【解决方案1】:

不使用Compare-Object,你可以像下面这样:

$csv1 = Import-Csv -Path 'C:\scripts\test1.csv'
$csv2 = Import-Csv -Path 'C:\scripts\test2.csv'

$csv3 = foreach ($item in $csv2) {
    $compare = $csv1 | Where-Object { $_.email -eq $item.email }
    if ($compare.Country -ne $item.Country -or $compare.Department -ne $item.Department) {
        # output the object from $csv2 to be collected in the new $csv3
        $item
    }
}

$csv3 | Export-Csv -Path 'C:\scripts\test3.csv' -Delimiter ';' -NoTypeInformation

如果您确实想使用Compare-Object,这也可以:

$csv1 = Import-Csv -Path 'C:\scripts\test1.csv'
$csv2 = Import-Csv -Path 'C:\scripts\test2.csv'

Compare-Object -ReferenceObject $csv1 -DifferenceObject $csv2 -Property Country,Department -PassThru |
Where-Object{ $_.SideIndicator -eq "=>" } | Select-Object * -ExcludeProperty SideIndicator |
Export-Csv -Path 'C:\scripts\test3.csv' -Delimiter ';' -NoTypeInformation

【讨论】:

  • 感谢您的评论,还有很多东西要学:)
  • @Ruan2106 我们都这样做;)
猜你喜欢
  • 2019-01-19
  • 1970-01-01
  • 1970-01-01
  • 2018-10-01
  • 1970-01-01
  • 2021-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多