
Ich bin mir bewusst, dass diese Frage schon einmal gestellt wurde, aber ich hatte mit den vorherigen Antworten kein Glück. Meine Tabelle hat insgesamt etwa 30.000 Zeilen.
Meine Tabelle ist folgendermaßen formatiert:
Name,colour,postcode,Easting,Northing,type,Group
123,red,1,1,1,1,oscar
123,blue,1,1,1,1,bravo
122,magenta,1,1,1,1,oscar
122,turquoise,1,1,1,1,oscar
121,brown,1,1,1,1,bravo
121,green,1,1,1,1,oscar
Ich muss die Datei basierend auf dem Feld „Name“ aufteilen. Ein Bonus, wenn ich nach Name und Gruppe aufteilen kann (z. B. alle Felder, die 121 und Oscar in einer Datei enthalten usw.), aber ich bin auch sehr zufrieden, wenn ich nur nach Name aufteile.
Antwort1
Versuchen Sie Folgendes, um die Dateien in verschiedene Dateien aufzuteilen:
$csv = Import-Csv C:\temp\example.csv
$names = $csv | select -ExpandProperty Name -Unique
foreach ($name in $names) { $csv | where {$_.name -like $name} | export-csv c:\temp\example_$name.csv }
Sie können es erneut tun und dabei den Namen durch die Gruppe ersetzen, um die einzelnen resultierenden Dateien aufzuteilen, falls dies hilft.
Antwort2
Um die Ausgabe zu gruppieren, verwenden Sie einfach das Group-Object
Cmdlet.
> Import-Csv .\example.csv | Group-Object Name,Group | Sort-Object Name
Count Name Group
----- ---- -----
1 121, bravo {@{Name=121; colour=brown; postcode=1; Easting=1; Northing=1; type=1; Group=bravo }}
1 121, oscar {@{Name=121; colour=green; postcode=1; Easting=1; Northing=1; type=1; Group=oscar}}
2 122, oscar {@{Name=122; colour=magenta; postcode=1; Easting=1; Northing=1; type=1; Group=oscar }, @{Name=12...
1 123, bravo {@{Name=123; colour=blue; postcode=1; Easting=1; Northing=1; type=1; Group=bravo}}
1 123, oscar {@{Name=123; colour=red; postcode=1; Easting=1; Northing=1; type=1; Group=oscar }}
Bitte beachten Sie, dass Group-Object
die Ausgaben die eigenen festen Eigenschaften Count,Name,Group
(nicht bezogen aufdeinEigenschaftsnamen.)
Nachteil hierbei ist, dass die automatisch generierte Name
Eigenschaft ein Komma enthält
(kann nicht direkt für den Ausgabedateinamen verwendet werden)
Sie können jedoch im Handumdrehen eine Gruppierung erstellen, die einer berechneten Eigenschaft ähnelt.
> Import-Csv .\example.csv | Group-Object {$_.Name+'_'+$_.Group.Trim(' ')}| Sort-Object Name
Count Name Group
----- ---- -----
1 121_bravo {@{Name=121; colour=brown; postcode=1; Easting=1; Northing=1; type=1; Group=bravo }}
1 121_oscar {@{Name=121; colour=green; postcode=1; Easting=1; Northing=1; type=1; Group=oscar}}
2 122_oscar {@{Name=122; colour=magenta; postcode=1; Easting=1; Northing=1; type=1; Group=oscar }, @{Name=12...
1 123_bravo {@{Name=123; colour=blue; postcode=1; Easting=1; Northing=1; type=1; Group=bravo}}
1 123_oscar {@{Name=123; colour=red; postcode=1; Easting=1; Northing=1; type=1; Group=oscar }}
So geben Sie die Gruppen in speaking
Dateinamen aus:
Import-Csv .\example.csv | Group-Object {$_.Name+'_'+$_.Group.Trim(' ')} | Sort-Object Name |
ForEach-Object{
$File = "example_{0}.csv" -f $_.Name
$_.Group | Export-Csv -Path $File -NoTypeInformation
}
Beispielergebnis:
> gci example_*.csv | %{'_'*10+$_.Name+'_'*10;gc $_.Name;""}
__________example_121_bravo.csv__________
"Name","colour","postcode","Easting","Northing","type","Group"
"121","brown","1","1","1","1","bravo "
__________example_121_oscar.csv__________
"Name","colour","postcode","Easting","Northing","type","Group"
"121","green","1","1","1","1","oscar"
__________example_122_oscar.csv__________
"Name","colour","postcode","Easting","Northing","type","Group"
"122","magenta","1","1","1","1","oscar "
"122","turquoise","1","1","1","1","oscar "
__________example_123_bravo.csv__________
"Name","colour","postcode","Easting","Northing","type","Group"
"123","blue","1","1","1","1","bravo"
__________example_123_oscar.csv__________
"Name","colour","postcode","Easting","Northing","type","Group"
"123","red","1","1","1","1","oscar "