gpt4 book ai didi

powershell 比较两个文件并用侧面指示器列出它们的列作为匹配/不匹配

转载 作者:行者123 更新时间:2023-12-03 09:47:45 24 4
gpt4 key购买 nike

我看过 powershell 脚本,我也想到了。我想添加的是另一列,它会显示侧指示符比较器(“==”、“<=”、“=>”)并将它们命名为 MATCH(如果“==”)和 MISMATCH(如果“<=”和“=>”)。关于如何执行此操作的任何建议?

这是脚本的链接(Florent Courtay 致谢) How can i reorganise powershell's compare-object output?

$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}}

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

我想到的输出:

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

最佳答案

这是一个独立的解决方案;只需将 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]
}
}

以上结果:

Header OldValue NewValue Status
------ -------- -------- ------
a 1 1a MATCH
c 3 NA MISMATCH
d NA 4 MISMATCH

注意:

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

  • 需要调用Sort-Object Name 来按Header 值对输出进行排序谢谢,LotPings .,因为,由于 Compare-Object 对其输出的排序方式(首先是右侧项目),Group-Object 创建的组的顺序不会 自动反射(reflect)第一个 CSV 的标题值顺序(d 将出现在 c 之前)。

关于powershell 比较两个文件并用侧面指示器列出它们的列作为匹配/不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51774327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com