组合不同的列 powershell
Combining different columns 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
哪个 returns 我这个:
"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
我需要合并这种格式的 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
哪个 returns 我这个:
"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