Aufteilen einer xlsx/csv-Datei basierend auf dem Spaltenwert

Aufteilen einer xlsx/csv-Datei basierend auf dem Spaltenwert

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-ObjectCmdlet.

> 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-Objectdie Ausgaben die eigenen festen Eigenschaften Count,Name,Group
(nicht bezogen aufdeinEigenschaftsnamen.)
Nachteil hierbei ist, dass die automatisch generierte NameEigenschaft 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 speakingDateinamen 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 "

verwandte Informationen