2016-07-01 9 views
1

Ich habe eine .csv Datei, die Merge von mehreren Zeilen zu einzelnen Zeile in csv Mit Powershell

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

Ausgang

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

Ich habe versucht, wie

sieht das mit unten in der Powershell sein sollte, aber es ist 0 für beide Spalten

$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 
+0

War ein Formatierungsproblem. Der letzte Eintrag sollte 2, c sein - oder? –

+0

Ja, es ist 2, c. – Newbee

Antwort

0
Rückkehr

Verwenden Sie das Import-Csv Cmdlets Ihrezu laden. Gruppieren Sie die Einträge anhand des Cmdlets ID mithilfe des Cmdlets Group-Object. Dann können Sie über die Gruppe mit dem Cmdlet Foreach-Object iterieren und für jede ID Ihr gewünschtes Objekt erstellen. Schließlich exportieren Sie es zurück in CSV mit dem Export-Csv Cmdlet:

+0

Es funktioniert. Vielen Dank. Willst du nur verstehen, was die Bedeutung von .Name und .Group hier bedeutet? – Newbee

+0

Wir gruppieren das csv-Objekt mit seiner ID, also wenn Sie 'Import-Csv 'DeptDetails.csv' | Gruppen-Objekt-ID' Sie werden sehen, dass das Ergebnis-Objekt-Array (welches wir iterieren) eine 'Name'- und' Gruppen'-Eigenschaft enthält, wobei 'Name' die' ID' ist (weil wir damit gruppieren). Bitte überlegen Sie, die Antwort zu akzeptieren. –

+0

Wie kann ich hier "Get-content" verwenden, wenn ich in die gleiche Datei lesen und schreiben muss? – Newbee

Verwandte Themen