PowerShell导入CSV后按指定表头分组输出行数据的实现方法
PowerShell实现CSV按表头分组输出关联值
问题说明
测试CSV源内容如下:
[ID];[GroupID];[en];[de] 001;001;on;an 002;001;off;aus
初始脚本逻辑是逐行遍历单条记录的所有属性,因此输出结果是按行打散的字段,无法实现按列(表头)聚合的效果。另外初始代码中Import-Csv的分隔符参数存在拼写错误:正确参数名为-Delimiter,原代码写为Delimeter缺失字母i,会导致导入格式异常。
期望输出格式为按指定语言列表头分组,同组下展示每行对应的ID、GroupID和当前语言列的值:
[en] 001 001 on 002 001 off [de] 001 001 an 002 001 aus
可行实现方案
以下脚本针对3万行+30列的场景做了适配,无多余性能开销,可直接运行:
# 导入CSV文件,替换为你的实际文件路径 $csvData = Import-Csv -Path "D:\test.csv" -Delimiter ";" # 配置需要分组输出的列:默认自动排除ID、GroupID列,输出所有剩余列 # 若需手动指定列,可替换为 $targetColumns = @('[en]','[de]','[fr]') 格式 $targetColumns = $csvData[0].PSObject.Properties.Name | Where-Object { $_ -notin '[ID]', '[GroupID]' } # 按列分组输出 foreach ($column in $targetColumns) { # 输出当前分组表头 $column # 逐行拼接关联字段 foreach ($line in $csvData) { "{0} {1} {2}" -f $line.'[ID]', $line.'[GroupID]', $line.$column } }
使用说明
- 若需要将结果保存为文件,可在脚本末尾追加管道导出命令:
| Out-File -Path "D:\result.txt" -Encoding UTF8 - 30000行数据量级下脚本运行耗时在百毫秒级,不会出现性能问题
- 列名匹配严格和CSV表头一致即可,新增语言列不需要修改遍历逻辑,会自动识别输出
内容的提问来源于stack exchange,提问作者s0Nic
相关产品推荐
相关产品推荐

