Ipfan 0 Geschrieben 29. Januar 2020 Melden Teilen Geschrieben 29. Januar 2020 (bearbeitet) 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. 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 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 29. Januar 2020 von Ipfan Zitieren Link zu diesem Kommentar
MurdocX 949 Geschrieben 29. Januar 2020 Melden Teilen Geschrieben 29. Januar 2020 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 Zitieren Link zu diesem Kommentar
Ipfan 0 Geschrieben 29. Januar 2020 Autor Melden Teilen Geschrieben 29. Januar 2020 Danke für deine Antwort. Damit werde ich mich gleich mal beschäftigen. Gibt es bei Format-Table denn die Möglichkeit Datensätze zusammenzuführen? "es kann pro Datensatz genau 1 Datensatz geben" ist natürlich Quatsch... Ich weiß allerdings auch nicht mehr, was ich schreiben wollte. Zitieren Link zu diesem Kommentar
MurdocX 949 Geschrieben 29. Januar 2020 Melden Teilen Geschrieben 29. Januar 2020 Powershell bietet die Möglichkeit zu gruppieren über: Group-Object | docs.microsoft.com https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/group-object?view=powershell-7 Vielleicht hilft Dir das weiter. Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 29. Januar 2020 Melden Teilen Geschrieben 29. Januar 2020 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? Zitieren Link zu diesem Kommentar
Ipfan 0 Geschrieben 29. Januar 2020 Autor Melden Teilen Geschrieben 29. Januar 2020 Vielen Dank BOfH_666 & MurdocX ! Ganz funktioniert es bisher noch nicht, aber ich bin auf dem richtigen Weg. Das hat mir auf jeden Fall sehr geholfen. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.