【问题标题】:Powershell - Group-Object Expand and Group againPowershell - Group-Object 再次展开和分组
【发布时间】:2021-05-01 16:15:07
【问题描述】:

我有一个 .csv 文件,我对两个属性“DN”、“SKU”进行分组,然后对另一个属性“DeliQty”进行求和 这工作正常,总和反映回组。 但是,然后我需要重新组合“DN”并写出单独的文件。 我已经尝试过 Select-Object -Expand Group 但这会恢复为原始内容而没有总和。

有没有办法取消分组保留总和然后再次分组?

$CSVFiles = Get-ChildItem -Path C:\Scripts\INVENTORY\ASN\IMPORT\ -Filter *.csv

foreach ($csv in $CSVFiles) {
    $group = Import-Csv $csv.FullName | Group-Object DN, SKU
    $group | Where Count -gt 1 | ForEach-Object {
    $_.Group[0].'DeliQty' = ($_.Group | Measure-Object DeliQty -Sum).Sum 
    } 
    }

【问题讨论】:

    标签: powershell csv group-object


    【解决方案1】:

    您可以执行以下操作:

    $CSVFiles = Get-ChildItem -Path C:\Scripts\INVENTORY\ASN\IMPORT\ -Filter *.csv
    
    foreach ($csv in $CSVFiles) {
        $group = Import-Csv $csv.FullName | Group-Object DN, SKU | Foreach-Object {
            if ($_.Count -gt 1) {
                $_.Group[0].DeliQty = ($_.Group | Measure-Object DeliQty -Sum).Sum
            }
            $_.Group[0]
        } 
        # outputs summed and single group objects
        $group
    }
    

    【讨论】:

    • 感谢您的回复。这在一定程度上有效。但是,除了 $group 中的其他行之外,$Contents 中还显示了总和行。示例:原始 $Contents 中有两行具有相同的 DN 和 SKU。第 1 行 DeliQty = 10 第 2 行 DeliQty = 20 在查看 Group-Object DN 之后的 $Contents 时。已执行总和并更新了自定义对象。但是,第 2 行也仍然存在。第 1 行 DeliQty = 30 第 2 行 DeliQty = 20 我的理解是这两行都将被总和行替换。所需的结果应该是包含总金额的单行。
    • 您只想输出Count > 2 的行吗?还是要输出求和的行和无法分组的行?
    • 嗨,我需要求和的行和那些无法分组的行。主要输入 .csv 包含一些重复的行,我将它们滚动成一行,对数量求和。输出将包含未受影响的行和求和的行。谢谢
    • 非常感谢,这正在按要求工作!
    猜你喜欢
    • 1970-01-01
    • 2013-01-06
    • 2020-12-27
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 2020-04-21
    • 2022-01-16
    相关资源
    最近更新 更多