davitzen
Goto Top

Zahlen via Powershell nach Anzahl der Vorkommen Absteigend sortieren

Hallo Leute,

ich sitze gerade an einer ganz tollen Aufgabe und komme nicht wirklich weiter.

In einer csv- Datei befinden sich mehrere Zeilen, welche immer mit der selben Struktur anfangen (5- stellige Zahl).
Die Aufgabe ist es nun, gleiche Zahlen zu finden und diese dann je nach Anzahl der Vorkommen absteigend zu sortieren.

Quelle CSV:
MG-Nr.|Straße|PLZ/Ort|Bundesland

Soll so aussehen:
MG-Nr.|Straße|PLZ/Ort|Bundesland

Ich habe in Powershell keine bis wenig Erfahrung...

#CSV einlesen
$a=Import-Csv -Path 'D:\sort\test.csv'  
#nur die Zeilen mit den Mitgliedsnummern herausfiltern
$a | Select-String -Pattern '\d\d\d\d\d'   

Wie gehe ich da am Besten vor?
Eine Idee wäre, immer nach den Gleichen Nummern zu suchen und diese temporär abzulegen.
Im Anschluss könnte man dann ja die Anzahl der Zeilen herausfinden und danach eine neue CSV bauen...

Für jede Hilfe bin ich dankbar!

Gruß
David

Content-Key: 388260

Url: https://administrator.de/contentid/388260

Ausgedruckt am: 19.03.2024 um 07:03 Uhr

Mitglied: colinardo
Lösung colinardo 02.10.2018 aktualisiert um 12:45:39 Uhr
Goto Top
Servus,
kein Problem, Group-Object in Kombination mit Sort-Object ist dein Freund für dieses Vorhaben:
(Ich bin jetzt mal davon ausgegangen das deine CSV das "|" als Delimiter benutzt weil du es hier verwendet hast, wenn nicht bitte für Eingabe- und Ausgabedatei den Parameter -delimiter anpassen.)
(Import-Csv -Path 'D:\sort\test.csv' -Delimiter "|") | group 'MG-Nr.' | sort Count -Descending | select -Expand Group | Export-CSV 'D:\sort\test_neu.csv' -delimiter "|" -NoType -Encoding UTF8  

Grüße Uwe
Mitglied: davitzen
davitzen 02.10.2018 aktualisiert um 13:41:20 Uhr
Goto Top
Hallo Uwe,

das war doch die Lösung, ich hatte noch einen Fehler im Script...

Danke & Gruß
David
Mitglied: davitzen
davitzen 04.10.2018 um 12:24:12 Uhr
Goto Top
Hallo Uwe,

ich habe doch noch eine Frage dazu.

Die Sortierung klappt an sich wunderbar, doch ich habe noch weitere Einträge, die vielleicht nur 1x vorkommen, diese werden aber leider nur willkürlich sortiert. (zumindest habe ich kein Muster gefunden)

Kann man Grundsätzlich alles aufsteigend sortieren und trotzdem die Häufigkeit berücksichtigen (die meisten Vorkommen ganz am Ende)?

Gruß
David
Mitglied: colinardo
Lösung colinardo 04.10.2018 aktualisiert um 12:51:10 Uhr
Goto Top
Hallo David,
Zitat von @davitzen:
diese werden aber leider nur willkürlich sortiert. (zumindest habe ich kein Muster gefunden)
Nein hier wird nichts sortiert du wolltest nur eine absteigende Gruppierung nach Anzahl, alles andere wird so eingeordnet wie es in der ursprünglichen Reihenfolge vorhanden war.
Kann man Grundsätzlich alles aufsteigend sortieren und trotzdem die Häufigkeit berücksichtigen (die meisten Vorkommen ganz am Ende)?
Das kannst du, ändere dazu die Sortierroutine von oben (sort Count -Descending) folgendermaßen ab:
sort Count,Name
Dann wird als erstes nach Anzahl "aufsteigend" sortiert und zusätzlich nach dem Namen der Gruppierung (in diesem Fall ist dies ja das Feld "MG-Nr.") als "String".
Mitglied: davitzen
davitzen 04.10.2018 um 12:54:19 Uhr
Goto Top
Es kann doch so einfach sein!


Vielen Dank!
Mitglied: colinardo
colinardo 04.10.2018 aktualisiert um 13:02:45 Uhr
Goto Top
Immer gerne face-smile.

Zum Verständnis darfst du die einzelnen Pipe-Abschnitte gerne zerlegen und deren Ausgabe separat anschauen, das hilft ungemein wenn man noch neu mit der Powershell ist.