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

时间:2018-05-07 12:44:50

标签: windows powershell csv grouping

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

我导入一个包含2列的CSV文件(ServerName和Size) 像这样:

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

SRV2   | 120

SRV1   | 100

SRV1   | 140

SRV2   | 200

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

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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)
    }
}

您需要更改案例中的分隔符