arrays - PowerShell-如果任何条目具有特定的属性值,则抓取所有同名条目

标签 arrays powershell

目前,我有一组具有多个类别的主要项目。如果一个条目在 isEaten 中被标记为“Y”,我想将相同 FruitName 的所有条目拉入他们自己的列表中,即使其他条目在 isEaten 类别中被标记为“N”。
所有项目的 list :

FruitName    FruitID    isEaten    EnteredDate
---------    -------    -------    -----------
Apple          100        Y           1/2/21
Apple          101        N           2/3/21
Apple          102        N           3/4/21
Orange         103        N           4/5/21
Kiwi           104        N           5/6/21
抓取被吃水果的数据:
FruitName    FruitID    isEaten    EnteredDate
---------    -------    -------    -----------
Apple          100        Y           1/2/21
Apple          101        N           2/3/21
Apple          102        N           3/4/21
然后,我想删除所有带有“Y”的行,如果剩余的条目不止一个,则只保留最近输入的日期。
最终预期结果:
FruitName    FruitID    isEaten    EnteredDate
---------    -------    -------    -----------
Apple          102        N           3/4/21
虽然静态删除 Apple 行可能有效,但我希望此列表会定期更改,因此最好使用动态解决方案。我目前的方法是尝试获取所有在 isEaten 类别中带有“Y”的 FruitNames,然后返回主列表(名为 $all_fruits)并获取所有具有相同名称的 FruitNames:
# Grabbing the FruitNames of isEaten fruits:
$eaten_groups= $all_fruits| ForEach-Object{$_.Group | Where-Object isEaten-eq "Y" }

# Collecting all entries in the main list $all_fruits with the same FruitNames as $eaten_groups
$eaten_all = @($all_fruits| Where-Object {
    @(Compare-Object $_ $eaten_groups-Property FruitName-IncludeEqual -ExcludeDifferent).count -eq 0
})

$sorted_eaten = $eaten_all | Group-Object -Property FruitNames| ForEach-Object{$_.Group | Sort-Object -Property EnteredDate -Descending | Select-Object -First 1}

我遇到的问题是正确抓取列表,因为目前它只抓取所有 isEaten=Y 或 isEaten=N 取决于我是否设置 Eaten_groups 来查找 Y 或 N。
如果任何条目具有 isEaten = 'Y',我如何获取所有同名条目?
任何帮助是极大的赞赏!

最佳答案

Santiago Squarzon's helpful answer的精简版这也建立在 Group-Object 之上小命令:

@'
FruitName    FruitID    isEaten    EnteredDate
Apple          100        Y           1/2/21
Apple          101        N           2/3/21
Apple          102        N           3/4/21
Orange         103        N           4/5/21
Orange         103        Y           7/5/21
Orange         103        N           8/5/21
Kiwi           104        N           5/6/21
Kiwi           104        Y           5/6/21
Kiwi           104        Y           1/6/21
'@ -replace '  +', ',' | ConvertFrom-Csv | 
  Group-Object FruitName |
    Where-Object { $_.Group.isEaten -contains 'Y' } |
      Foreach-Object {
         ($_.Group | Sort-Object -Descending { [datetime] $_.EnteredDate })[0]
      }

关于arrays - PowerShell-如果任何条目具有特定的属性值,则抓取所有同名条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68445396/

相关文章:

android - 警报对话框中带有复选框的 ListView

c# - 将 LastIndexOf 和 Substring 与数组一起使用

powershell - 如何在Windows Server 2012中使用Powershell 5检查Windows服务的启动类型是 "auto"还是 "auto-delayed"

arrays - 新人需要帮助获得正确的正则表达式

powershell - 如果从 Cygwin 调用 powershell 脚本,为什么它的行为会有所不同?

azure - Get-AzApiManagementSubscription 命令返回订阅列表,但键值为空

Java ~ 返回数组时类型不兼容?

arrays - 如何取消嵌套 Postgres 中的日期数组?

php - 数组中的两个 PHP 值

windows - 如何在 Powershell 中转义反斜杠