如何将一条线分成多行?

时间:2015-09-29 11:42:04

标签: powershell csv split

我有一个CSV文件,如下所示:

Column1,Column2,Column3
John,Smith,"AA, AH, CA, NI, PB"
Reginald,Higginsworth,"AA, AH, CA, NI, PB, SN, ZS"

您会注意到Column3中有多个值(括在引号中)。 我需要做的是在Column3中为每个值在CSV中生成一行数据,即文件需要看起来像:

Column1,Column2,Column3
John,Smith,AA
John,Smith,AH
John,Smith,CA
John,Smith,NI
John,Smith,PB
Reginald,Higginsworth,AA
Reginald,Higginsworth,AH
Reginald,Higginsworth,CA
Reginald,Higginsworth,NI
Reginald,Higginsworth,PB
Reginald,Higginsworth,SN
Reginald,Higginsworth,ZS

我在这方面已经进行了多次尝试,似乎无法做到这一点。

1 个答案:

答案 0 :(得分:5)

使用Import-Csv读取输入文件,然后拆分第三列并为每个结果元素创建新的输出行:

Import-Csv 'C:\path\to\input.csv' | ForEach-Object {
  foreach ($value in ($_.Column3 -split ', ')) {
    $_ | Select-Object -Exclude Column3 -Property *,@{n='Column3';e={$value}}
  }
} | Export-Csv 'C:\path\to\output.csv' -NoType

Select-Object构造使用仅包含单个值的新属性Column3替换现有属性Column3