powershell比较两个文件并列出其侧面指示符为匹配/不匹配的列

Arn*_*cen 3 powershell

我见过powershell脚本,我也记得.我想添加的是另一列,它将显示旁边指标比较器("==","<=","=>")并将它们命名为MATCH(如果"==")和MISMATCH(如果"<="和"=>").有关如何做到这一点的任何建议?

这是脚本的链接(Credits to Florent Courtay) 我如何重新组织powershell的比较对象输出?

$a = Compare-Object (Import-Csv 'C:\temp\f1.csv') (Import-Csv 'C:\temp\f2.csv') -property Header,Value 
    $a | Group-Object -Property Header | % { New-Object -TypeName psobject -Property @{Header=$_.name;newValue=$_.group[0].Value;oldValue=$_.group[1].Value}}
Run Code Online (Sandbox Code Playgroud)

================================================== ======================

我想到的输出:

Header1             Old Value       New Value    STATUS
------              ---------       --------- -----------
String1             Value 1         Value 2      MATCH
String2             Value 3         Value 4      MATCH
String3             NA              Value 5      MISMATCH
String4             Value 6         NA           MISMATCH
Run Code Online (Sandbox Code Playgroud)

mkl*_*nt0 5

这是一个独立的解决方案; 只需ConvertFrom-Csv用您的Import-Csv电话替换来电:

# Sample CSV input.
$csv1 = @'
Header,Value
a,1
b,2
c,3
'@

$csv2 = @'
Header,Value
a,1a
b,2
d,4
'@

Compare-Object (ConvertFrom-Csv $csv1) (ConvertFrom-Csv $csv2) -Property Header, Value |
  Group-Object Header | Sort-Object Name | ForEach-Object {
    $newValIndex, $oldValIndex = ((1, 0), (0, 1))[$_.Group[0].SideIndicator -eq '=>']
    [pscustomobject] @{
      Header = $_.Name
      OldValue = ('NA', $_.Group[$oldValIndex].Value)[$null -ne $_.Group[$oldValIndex].Value]
      NewValue = ('NA', $_.Group[$newValIndex].Value)[$null -ne $_.Group[$newValIndex].Value]
      Status = ('MISMATCH', 'MATCH')[$_.Group.Count -gt 1]
    }
  }
Run Code Online (Sandbox Code Playgroud)

以上产量:

Header OldValue NewValue Status
------ -------- -------- ------
a      1        1a       MATCH
c      3        NA       MISMATCH
d      NA       4        MISMATCH
Run Code Online (Sandbox Code Playgroud)

注意:

  • 假设每个输入文件中给定的Header列值最多出现一次.

  • Sort-Object Name需要调用由排序输出Header谢谢,LotPings. 因为,由于如何Compare-Object订购其输出(右侧,仅第一项),通过创建组的顺序Group-Object不会自动反映标头值的第一个CSV的订单(d会出现之前c).