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

PowerShell实现CSV对象分组输出指定格式列表的最简方法

PowerShell按字段分组CSV的极简实现

问题

现有如下格式的CSV文件:

Name,group_name,group_id
foo,Best,1
bar,Worst,2
baz,Best,1
bob,Worst,2

需要用最简洁的PowerShell写法,实现按组聚合,输出如下结果:

Count    group_id    group_name Names
-----    --------    ---------- -----
2        1           Best       ["foo", "baz"]
2        2           Worst      ["bar", "bob"]

最简实现

直接用PowerShell内置的CSV导入、分组、自定义对象输出三个步骤即可完成,完全匹配输出格式的单行命令如下:

Import-Csv .\data.csv | Group-Object group_id, group_name | ForEach-Object { [PSCustomObject]@{ Count = $_.Count; group_id = $_.Group[0].group_id; group_name = $_.Group[0].group_name; Names = '["{0}"]' -f ($_.Group.Name -join '", "') } }

如果需要更好的可读性,可以拆成多行格式:

Import-Csv .\data.csv | Group-Object group_id, group_name | ForEach-Object {
    [PSCustomObject]@{
        Count      = $_.Count
        group_id   = $_.Group[0].group_id
        group_name = $_.Group[0].group_name
        Names      = '["{0}"]' -f ($_.Group.Name -join '", "')
    }
}

实现逻辑:

  • Import-Csv会自动把CSV内容解析为按列名存属性的结构化对象,不需要手动处理文本分割
  • Group-Object同时按group_id、group_name两个字段分组,避免字段值不匹配导致的分组错误
  • 遍历每个分组时,直接用分组对象自带的Count属性得到组内成员数,从分组的第一条记录提取组ID、组名即可
  • 提取组内所有Name字段后,用字符串拼接直接生成和示例完全一致的["foo", "baz"]格式数组字符串;如果不需要严格匹配逗号后的空格,也可以把Names部分替换为$_.Group.Name | ConvertTo-Json -Compress,写法更短。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.08 16:15:17