如何在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
相关产品推荐
相关产品推荐

