组合不同的列powershell



我需要组合以下格式的csv条目:

ID, "Name", "Sex",  "Age"
1, "John", "m", "24"
2, "John", "m", "28"
2, "John", "m", "30"
3, "Melissa", "f", "24"
3, "Melissa", "f", "26"

至:

ID, "Name", "Sex", "Age", "Age" ,"Age"
1, "John", "m", "24", "28", "30"
3, "Melissa", "f", "24", "26"

到目前为止我得到的:

$csvData = Import-Csv 'test.csv'
$csvData | Group-Object "ID" | ForEach-Object {
[PsCustomObject]@{
"ID" = $_.Name
"Sex" = $_.Group."Sex" -join '","'
"Age" = $_.Group."Age" -join '","'
}
} | Export-Csv 'test_output.csv' -NoTypeInformation

它还给我这个:

"ID","Name", "Sex", "Age"
"1", "John", "John", "John", "m", "m", "m", "24", "28", "30"
"2", "Melissa", "Melissa", , "f", "f", "24", "26"

我该如何解决这个问题?

如果我理解得对,那么这只是PowerShell foo中的一个练习,而不是有意义的数据操作。

在这个前提下:你可以创建你想要的输出(并最终得到一个有效的csv(的一种方法是为每个"添加编号的属性;年龄;要包含在合并对象中的值。

$csvData = Import-Csv 'test.csv'
$csvData | Group-Object Name | ForEach-Object {
$obj = [ordered]@{
ID = $_.Group[0].ID
Name = $_.Name 
Sex = $_.Group[0].Sex
}
for ($i = 0; $i -lt $_.Group.Count; $i++) {
$obj["Age$($i+1)"] = $_.Group[$i].Age
}
[PsCustomObject]$obj
} | Export-Csv 'test_output.csv' -NoTypeInformation

最新更新