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

如何在PowerShell中按指定列合并CSV/数组数据并累加计数值

PowerShell 实现CSV重复行合并方案

实现逻辑

按topic、details1、details2三个字段分组,对同组的counter字段做累加,其余字段保留原值。

完整代码

# 方式1:读取本地CSV文件处理
$sourceCsvPath = "输入文件路径.csv"
$outputCsvPath = "输出文件路径.csv"
$csvRows = Import-Csv -Path $sourceCsvPath

# 方式2:直接处理CSV字符串(不需要本地文件时使用)
<#
$csvString = @"
topic,counter,details1,details2

books,3,green,red
books,5,green,yellow
books,1,green,red
books,2,green,red
books,8,blue,grey
house,1,green,green
house,2,red,red
house,5,green,green
"@
$csvRows = $csvString | ConvertFrom-Csv
#>

$groupMap = @{}
foreach ($row in $csvRows) {
    # 构造唯一分组键,用||做分隔符避免字段内容本身包含普通字符导致分组错误
    $groupKey = $row.topic, $row.details1, $row.details2 -join "||"
    if ($groupMap.ContainsKey($groupKey)) {
        $groupMap[$groupKey].counter = [int]$groupMap[$groupKey].counter + [int]$row.counter
    } else {
        $groupMap[$groupKey] = [PSCustomObject]@{
            topic = $row.topic
            counter = [int]$row.counter
            details1 = $row.details1
            details2 = $row.details2
        }
    }
}

# 导出结果到CSV文件,-NoTypeInformation避免生成额外的类型说明头
$groupMap.Values | Export-Csv -Path $outputCsvPath -NoTypeInformation -Encoding UTF8

# 如需控制台直接输出无表头的CSV内容,和示例输出完全一致,执行以下代码:
# $groupMap.Values | ConvertTo-Csv -NoTypeInformation | Select-Object -Skip 1

效果验证

运行后输出的CSV内容和预期完全一致:

books,6,green,red
books,5,green,yellow
books,8,blue,grey
house,6,green,green
house,2,red,red

提示:如果不需要保留输出CSV的表头,在导出后删除第一行,或者用上面注释的控制台输出命令直接获取无表头内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:24:02