Jump to content

Powershell sort-object -unique


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Guten Morgen,

ich habe ein Powershell Problem, welches ich selber nicht beheben kann bzw. bei dem ich mir nicht mehr sicher bin, ob es wirklich funktioniert auf deisem Wege.

 

Vorab möchte ich euch einmal schildern worum es überhaupt geht.

Ich habe eine Input Datei im CSV-Fornat mit vielen Benutzerdaten, aber um die ganze Sache etwas einfacher zu gestalten beschränke ich es mal auf 4 Datensätze.

  1. ID;E-Mail-Adresse;Start;Ende;Produkt
  2. 11111;max@mustermann.de;01.01.2000;;Produkt1
  3. 22222;erika@musterfrau.com;02.01.2010;;Produkt1
  4. 22222;erika@musterfrau.com;01.01.1993;31.12.2020;Produkt2
  5. 33333;john@doe.net;02.02.2020;31.12.2020;Produkt

 

Nun möchte ich Datensätze mit der gleichen ID mittels Powershell zusammenfassen (powershell, da ich mich hier am Besten auskenne).

 

  • Die ID ist pro Person einmalig
  • Eine ID kann mehrmals vorkommen, da diese mehrere Produkte zu unterschiedlichen Zeitpunkten erworben haben kann
  • Zu einer ID gehört immer genau 1 E-Mail-Adresse
  • pro Datensatz gibt es immer ein Startdatum
  • pro Datensatz kann es ein Enddatum geben, muss es aber nicht

Ich habe die CSV in ein Array eingelesen und ein paar Kleinigkeiten gemacht, sodass die Daten wie oben vorliegen.

 

Jetzt zum wirklichen Problem:

Ich möchte die Datensätze nach der ID sortieren und doppelte Einträge entfernen, sodass es pro ID nur noch 1 Datensatz im Array gibt.

Dies funktioniert natürlich sehr einfach mittels

$daten | sort-object "ID" -unique 

Jetzt werden Datensätze mit der gleichen ID zusammgeführt und es wird immer das neuere Datum gesetzt, was ich verstehen kann, aber leider nicht gewünscht ist.

Ich möchte immer das frühere Start Datum und das neuere End Datum haben.

 

Mir sind keine weiteren Parameter bekannt, die hier helfen könnten.

 

Ich könnte es über 2 Zählschleifen machen, die die Daten untereinander abgleichen und dann die gewünschten Daten zurückschreiben, aber dies würde durch die vielen Datensätze sehr lange dauern.

 

Hat jemand von euch eine Idee?

 

Liebe Grüße

 

bearbeitet von Ipfan
Link zu diesem Kommentar
vor 21 Minuten schrieb Ipfan:

es kann pro Datensatz genau 1 Datensatz geben

 

vor 49 Minuten schrieb Ipfan:

Ich möchte die Datensätze nach der ID sortieren und doppelte Einträge entfernen, sodass es pro ID nur noch 1 Datensatz im Array gibt.

Damit ist jeder Datensatz eindeutig. Meiner Meinung nach schließt sich dann "-unique" aus.

 

Vielleicht ist Format-Table etwas für Dich. Dort kann man die einzelnen Eigenschaften in den Expression für sich verändern.

Format-Table Name, @{ Label=”Folder”; Expression={$_.Path} }, Description –AutoSize

 

Link zu diesem Kommentar

So ... ich hoffe ich hab alles richtig verstanden ...

@"
ID;E-Mail-Adresse;Start;Ende;Produkt
11111;max@mustermann.de;01.01.2000;;Produkt1
22222;erika@musterfrau.com;02.01.2010;;Produkt1
22222;erika@musterfrau.com;01.01.1993;31.12.2020;Produkt2
33333;john@doe.net;02.02.2020;31.12.2020;Produkt 
"@ -split "`n" |
    ConvertFrom-Csv -Delimiter ';' |
        Select-Object -Property ID, E-Mail-Adresse,
            @{Name = 'Start'; Expression = { Get-Date $_.Start } },
            @{Name = 'Ende'; Expression = { Get-Date $_.Ende } },
            Produkt |
                Sort-Object -Property ID,Start,Ende  | 
                    Sort-Object -Unique ID |
                        Format-Table -AutoSize

Ein Problem bei Deiner Aufgabenstellung ist das Arbeiten mit Datumswerten, die (noch) einfache Strings sind. Also erstmal in [DateTime] Werte umwandeln, dann kann man auch vernünftig danach sortieren. Wenn Ein Sortierschritt nicht reicht, dann packst Du einfach mehrere hintereinander ... also erstmal nach ID, dann die Datumse in die gewünschte Reihenfolge bringen. Und dann die Dubletten rausschmeißen ...

 

Passt das so?  ;-)

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...