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

PowerShell如何遍历CSV文件并按名称生成汇总哈希表

PowerShell按Name分组求和解决方案

假设你已经通过Import-Csv读取了CSV文件(如果还没执行,用$csvData = Import-Csv -Path "你的文件路径.csv"完成),下面提供两种可行的实现方式:

方法一:用Group-Object快速分组求和(推荐)

这是最简洁的方式,利用PowerShell内置的分组和度量命令直接完成计算:

$summary = $csvData | Group-Object -Property Name | ForEach-Object {
    [PSCustomObject]@{
        Name        = $_.Name
        TotalValue1 = ($_.Group | Measure-Object -Property Value1 -Sum).Sum
        TotalValue2 = ($_.Group | Measure-Object -Property Value2 -Sum).Sum
    }
}

# 输出你需要的格式
$summary | ForEach-Object {
    "$($_.Name):$($_.TotalValue1),$($_.TotalValue2)"
}

关键步骤解释

  • Group-Object -Property Name:将原始数据按Name字段分组,每个分组对象包含Name(分组名称)和Group(该组的所有原始条目)。
  • Measure-Object -Property Value1 -Sum:对当前分组的Value1列求和,通过.Sum提取最终的求和结果。
  • [PSCustomObject]:创建自定义对象存储汇总结果,方便后续的格式输出或进一步处理。

方法二:用Hashtable手动累加(适合理解底层逻辑)

如果你想手动实现累加逻辑,用Hashtable可以这样写:

$sumHashtable = @{}

$csvData | ForEach-Object {
    # 确保数值类型,避免字符串拼接错误
    $name = $_.Name
    $value1 = [int]$_.Value1
    $value2 = [int]$_.Value2

    if ($sumHashtable.ContainsKey($name)) {
        # 已存在该分组,累加数值
        $sumHashtable[$name].Value1 += $value1
        $sumHashtable[$name].Value2 += $value2
    } else {
        # 首次遇到该分组,初始化数值
        $sumHashtable[$name] = [PSCustomObject]@{
            Value1 = $value1
            Value2 = $value2
        }
    }
}

# 输出结果
$sumHashtable.GetEnumerator() | ForEach-Object {
    "$($_.Key):$($_.Value.Value1),$($_.Value.Value2)"
}

注意事项

  • 务必将Value1和Value2转换为数值类型(比如[int]),因为Import-Csv读取的CSV列默认是字符串类型,直接相加会变成字符串拼接而不是数值求和。
  • 两种方法最终都会输出你需要的格式:IT:550,40、HR:98,23。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:11:35