在csv中将多行合并为单行使用Powershell

时间:2016-07-01 05:41:12

标签: powershell

我有一个.csv文件,看起来像

ID, Dept
1,x
1,y
1,z
2,a
2,b
2,c

输出应该是

ID, Dept
1, x;y;z
2, a;b;c

我在PowerShell中尝试使用以下内容,但是两列都返回0

$csvValues = Get-Content "DeptDetails.csv"
$duplicates = $csvValues | group-object ID | ? Count -gt 1

$objs = New-Object System.Collections.ArrayList
ForEach ($duplicate in $duplicates){
$objs.Add([pscustomobject]@{ID = ($duplicate.Group.ID | select -Unique) -as [int];
GroupName=($duplicate.Group.Dept | ? Length -gt 0) -join ';'})
}
$objs | Sort ID

1 个答案:

答案 0 :(得分:1)

使用Import-Csv cmdlet加载csv。使用ID cmdlet按Group-Object对条目进行分组。然后,您可以使用Foreach-Object cmdlet遍历该组,并为每个ID创建所需的对象。最后使用Export-Csv cmdlet将其导出回csv:

Import-Csv 'DeptDetails.csv' | Group-Object ID | ForEach-Object {
    [PsCustomObject]@{
        ID = $_.Name
        Dept = $_.Group.Dept -join ';'
    }
} | Export-Csv 'DeptDetails_output.csv' -NoTypeInformation