Windows 如何按共享列值对CSV行进行分组和求和?
我是powershell的新手,目前遇到了一个问题 我导入一个包含两列(服务器名和大小)的CSV文件 像这样:Windows 如何按共享列值对CSV行进行分组和求和?,windows,powershell,csv,grouping,Windows,Powershell,Csv,Grouping,我是powershell的新手,目前遇到了一个问题 我导入一个包含两列(服务器名和大小)的CSV文件 像这样: Server | Size ------------- SRV1 | 140 SRV2 | 120 SRV1 | 100 SRV1 | 140 SRV2 | 200 我想为每个服务器添加所有大小值,例如: SRV2 = 120+200 SRV1 = 140+100+140 我不知道怎么做。 我尝试使用for循环,但操作是针对每一行进行的,因此我的结果是错
Server | Size
-------------
SRV1 | 140
SRV2 | 120
SRV1 | 100
SRV1 | 140
SRV2 | 200
我想为每个服务器添加所有大小值,例如:
SRV2 = 120+200
SRV1 = 140+100+140
我不知道怎么做。
我尝试使用for循环,但操作是针对每一行进行的,因此我的结果是错误的。
有人能帮我吗?这里有一个例子,你可以这样做:
$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)
}
}
您需要在您的案例中更改分隔符以下是一个示例:
$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)
}
}
您需要更改案例中的分隔符使用:
- 要按服务器名称对CSV行进行分组(
)server
- 然后使用为每个组构造一个输出对象
- 包含服务器名称和所有关联行的Size值之和,通过使用以下值的
Server
,请将Name
替换为{n='Server';e='Name'}
根据您的样本数据,上述结果如下:
Name Size
---- ----
SRV1 380
SRV2 320
使用:
- 要按服务器名称对CSV行进行分组(
)server
- 然后使用为每个组构造一个输出对象
- 包含服务器名称和所有关联行的Size值之和,通过使用以下值的
Server
,请将Name
替换为{n='Server';e='Name'}
根据您的样本数据,上述结果如下:
Name Size
---- ----
SRV1 380
SRV2 320
谢谢你的回答。如果我的CSV包含两个以上不同的服务器,它还能工作吗?因为在我的示例中,我有2台服务器,但事实上,它可以是3台或4台。它应该可以与任意数量的服务器一起工作,请在解决问题时将答案标记为解决方案。我认为目的是实际求和值(相加并报告总和),而不是生成加法操作的字符串表示。还请注意,使用哈希表不能保证条目的顺序。谢谢您的回答。如果我的CSV包含两个以上不同的服务器,它还能工作吗?因为在我的示例中,我有2台服务器,但事实上,它可以是3台或4台。它应该可以与任意数量的服务器一起工作,请在解决问题时将答案标记为解决方案。我认为目的是实际求和值(相加并报告总和),而不是生成加法操作的字符串表示。还要注意,使用哈希表不能保证条目的顺序。