如何用PowerShell从CSV提取唯一列值并统计对应数量导出
满足需求的PowerShell实现方案
原脚本的问题
你当前编写的脚本仅靠Select-Object -Unique筛掉重复的Category值,没有引入分组计数逻辑,自然无法同步获取每个分类对应的条目数量。
可直接运行的实现代码
常规带表头版本
这个版本导出的Summary.csv会带规范列头,方便后续程序读取,输出格式如下:
Category,Count A,3 B,1
对应代码:
Import-Csv Products.csv -Delimiter "," | Group-Object -Property Category | Select-Object @{Name="Category";Expression={$_.Name}}, @{Name="Count";Expression={$_.Count}} | Export-Csv Summary.csv -Delimiter "," -NoTypeInformation
完全匹配你给出的无表头输出版本
如果你需要导出的文件和你列的预期格式完全一致,不带任何列头,可使用下面这段代码:
Import-Csv Products.csv -Delimiter "," | Group-Object -Property Category | ForEach-Object { "$($_.Name),$($_.Count)" } | Out-File Summary.csv -Encoding utf8
运行后生成的文件内容逐行匹配你的预期:
A,3 B,1
逻辑拆解
- 核心替换操作是把原来的去重逻辑换成
Group-Object -Property Category,这个命令会自动按Category字段把所有CSV记录归到对应分组里 - 每个分组生成的对象本身就带两个现成的属性:
Name存的是当前分组的分类值(也就是Category字段的内容),Count存的是这个分组下一共有多少条记录,完全不需要手动写循环挨个计数 - 导出时可根据需要调整输出格式:要带规范列头方便后续程序解析,就用
Export-Csv导出;要纯文本不带表头和你给出的示例格式完全匹配,就用ForEach-Object拼接字符串后输出到文件
内容的提问来源于stack exchange,提问作者Craig35
相关产品推荐
相关产品推荐

