如何按共享列值对CSV行进行分组和汇总?

问题描述 投票:1回答:2

我是PowerShell的新手,我目前遇到了一个问题。

我导入一个包含2列(ServerName和Size)的CSV文件,如下所示:

Server | Size
-------------
SRV1   | 140

SRV2   | 120

SRV1   | 100

SRV1   | 140

SRV2   | 200

我想为每个服务器添加所有Size值,例如:

SRV2 = 120+200
SRV1 = 140+100+140

我不知道该怎么做。我尝试使用for循环,但是每行都进行了操作,因此我的结果是错误的。谁能帮助我?

windows powershell csv grouping
2个回答
2
投票

使用:

Import-Csv file.csv | Group-Object Server | 
  Select-Object Name, @{ n='Size'; e={ ($_.Group | Measure-Object Size -Sum).Sum } }

如果您希望将第一个输出列命名为Server,请将Name替换为@{ n='Server'; e='Name' }

使用您的样本数据,上述产量:

Name Size
---- ----
SRV1  380
SRV2  320

0
投票

这是一个如何做到的例子:

$Data = Import-Csv -Path "yourfilepath" -Delimiter ";"

$SortedData = $Data | Group {$_.server}
$Hashtable = @{}
$SortedData.group | ForEach-Object {
    if ($Hashtable.Contains($_.server)) {
        $Hashtable[$_.server] += ",$($_.size)"
    } else {
        $Hashtable.Add($_.server,$_.size)
    }
}

在您的情况下,您需要更改分隔符

© www.soinside.com 2019 - 2024. All rights reserved.