You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

新手求助:如何用PowerShell按服务器名分组汇总CSV大小值?

如何在PowerShell中按服务器名称汇总CSV里的Size值

嗨,作为PowerShell新手碰到这种数据汇总问题太正常啦!你之前用for循环没搞定,大概率是因为只做了逐行处理,没实现分组累加的逻辑——其实PowerShell有现成的工具能轻松解决这个需求,我给你两种实用的方法:

方法一:用Group-Object + Measure-Object(推荐,更贴合PowerShell风格)

这种方法利用PowerShell的管道特性,先按服务器名分组,再计算每组的Size总和,代码简洁又直观:

# 先导入CSV文件,注意你的分隔符是|,必须指定-Delimiter参数
$serverData = Import-Csv -Path "你的文件路径.csv" -Delimiter "|"

# 分组并计算总和
$totalSummary = $serverData | Group-Object -Property Server | ForEach-Object {
    [PSCustomObject]@{
        ServerName = $_.Name
        TotalSize = ($_.Group | Measure-Object -Property Size -Sum).Sum
    }
}

# 输出最终汇总结果
$totalSummary

代码解释:

  • Group-Object -Property Server:把CSV里相同Server名称的行归为一组
  • Measure-Object -Property Size -Sum:计算每组里Size列的总和
  • 最后用[PSCustomObject]封装成清晰的键值对格式,方便查看

方法二:用foreach循环+哈希表(如果你更习惯循环逻辑)

如果你还是想用循环来实现,可以借助哈希表来记录每个服务器的累加值,记得要把Size转成数值类型,避免出现字符串拼接的错误:

$serverData = Import-Csv -Path "你的文件路径.csv" -Delimiter "|"
# 创建一个空哈希表来存每个服务器的总Size
$sizeSumTable = @{}

foreach ($row in $serverData) {
    # 把Size从字符串转成整数,不然会变成"120"+"200"="120200"
    $currentSize = [int]$row.Size
    if ($sizeSumTable.ContainsKey($row.Server)) {
        # 如果服务器已经在表里,就累加Size
        $sizeSumTable[$row.Server] += $currentSize
    } else {
        # 如果是第一次遇到该服务器,初始化数值
        $sizeSumTable[$row.Server] = $currentSize
    }
}

# 把哈希表转成易读的对象格式输出
$sizeSumTable.GetEnumerator() | ForEach-Object {
    [PSCustomObject]@{
        ServerName = $_.Key
        TotalSize = $_.Value
    }
}

为啥你之前的for循环会出错?

你之前的循环应该是没维护一个存储累加值的容器(比如哈希表),也没处理Size的类型转换,导致要么每次覆盖之前的值,要么把Size当成字符串拼接,自然得不到正确的总和啦~

内容的提问来源于stack exchange,提问作者JohnDoe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:53:32