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

Printed on: April 16, 2024 at 12:04 o'clock

Member: colinardo
Solution colinardo Oct 02, 2018 updated at 10:45:39 (UTC)
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
Member: davitzen
davitzen Oct 02, 2018 updated at 11:41:20 (UTC)
Goto Top
Hallo Uwe,

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

Danke & Gruß
David
Member: davitzen
davitzen Oct 04, 2018 at 10:24:12 (UTC)
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
Member: colinardo
Solution colinardo Oct 04, 2018 updated at 10:51:10 (UTC)
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".
Member: davitzen
davitzen Oct 04, 2018 at 10:54:19 (UTC)
Goto Top
Es kann doch so einfach sein!


Vielen Dank!
Member: colinardo
colinardo Oct 04, 2018 updated at 11:02:45 (UTC)
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.