gpt4 book ai didi

Powershell:比较两个数组,查找缺失项和更改的值

转载 作者:行者123 更新时间:2023-12-05 01:06:53 24 4
gpt4 key购买 nike

我有一个问题,希望有人能够提供一些指导。我有两个 csv 文件,File1 和 File2。

文件1:

value1,value2
A,10
B,30
C,45
D,39

文件2:

value1,value2
A,10
B,32
C,44
E,7
F,3

我正在寻找的是两件事。我需要检查文件之间是否删除了 value1 中的任何项目,和/或我需要检查相应的数字 value2 是否减少了。

首先,比较文件并找出在 File1 和 File2 中添加或删除了哪些行。如果我只比较 value1 项,那么使用 Compare-Object 就很容易了。

所以我第一次比较的结果,我会看到从 File1 到 File2,我会看到添加了 E 和 F 行,并且删除了 D 行。完美。

但是,这是我正在努力解决的下一部分。然后我需要比较每个文件中的 value2,并确定该数字是否减少(或可能增加或保持不变)。

棘手的部分是我不能只将 File1 中的第 4 行 value2 与 File2 中的第 4 行 value2 进行比较,因为一个用于 D,另一个用于 E。我不知道如何先匹配项目,然后基本上只取那些匹配的项目并比较那些项目的 value2?但是如果没有前一行匹配,会发生什么呢? (因为该行是新添加到file2或该行被删除并且只存在于file1中)

最后,我要提出的是所有已删除的 value1 的列表,以及自 File1 以来相应 value2 减少的所有 value1 的列表。我不关心增加或增加。

希望有人可以提供一些指导。谢谢!

最佳答案

提供Santiago's helpful answer 的单管道替代方案:

它依赖于 Add-Member , Group-Object , 和 calculated properties通过 Select-Object :

(@'
value1,value2
A,10
B,30
C,45
D,39
'@ | ConvertFrom-Csv | Add-Member -PassThru Source 1) +
(@'
value1,value2
A,10
B,32
C,44
E,7
F,3
'@ | ConvertFrom-Csv | Add-Member -PassThru Source 2) |
Group-Object value1 | ForEach-Object {
if ($_.Count -eq 1) {
$_.Group[0] | Add-Member -PassThru Status @{ 1 = '<='; 2 = '=>' }[$_.Group[0].Source]
}
else {
$grp = $_
$change = ($_.Group[0].value2).CompareTo($_.Group[1].value2)
$_.Group[0] |
Select-Object value1,
@{ name = 'value2'; expression = { $grp.Group[0].value2, $grp.Group[1].value2 } },
@{ name = 'Status'; expression = { $change } }
}
}

以上结果如下:

value1 value2   Status
------ ------ ------
A {10, 10} 0
B {30, 32} -1
C {45, 44} 1
D 39 <=
E 7 =>
F 3 =>
  • <==> Compare-Object 的输出中的含义相同: <=表示value1 LHS 独有的值,=>那些 RHS 独有的。

  • -1/0/1映射到 value2 中的增加/相等/减少属性值。

关于Powershell:比较两个数组,查找缺失项和更改的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68308604/

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