kraemer
Goto Top

Powershell - CSV - kleinster Wert einer Gruppe

Moin zusammen,

ich habe da eine Problemstellung, die ich normalerweise simpel mit einer Schleife lösen würde. Da ich in der Vergangenheit aber immer wieder gemerkt habe, dass die Powershell doch einiges mehr kann und dabei auch noch performanter ist, möchte ich hier mal fragen, ob es da evtl. einen anderen Ansatz gibt.

Angenommen folgende CSV (extrem eingekürzt - klassisches Parent/Child):

Typ	Gruppe		Preis
P	1		
C	1		4.00
C	1		5.00
P	2		
C	2		7.00
C	2		5.00

Was ich jetzt brauche ist der niedrigste Preis beim Parent - also bei P1 4.00 und bei P2 5.00 also wie folgt:

Typ	Gruppe		Preis
P	1		4.00
C	1		4.00
C	1		5.00
P	2		5.00
C	2		7.00
C	2		5.00


Gibt es da eine "bessere" Variante, als das ganze mit Hilfsvariablen und Schleife durchzugehen?

Gruß Krämer

Content-Key: 366090

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

Printed on: July 18, 2024 at 19:07 o'clock

Mitglied: 135333
Solution 135333 Feb 26, 2018 updated at 15:36:41 (UTC)
Goto Top
$csv = Import-CSV "C:\datei.csv" -delimiter "`t"  
$csv | sort Preis | group Gruppe | %{
    $_.Group.Preis = $_.Group | select -Skip 1 -First 1 -Expand Preis
}
$csv
Gruß Snap

Tante EDIT: Korrektur vorgenommen.
Member: Kraemer
Kraemer Feb 26, 2018 at 16:01:00 (UTC)
Goto Top
Zitat von @135333:
Gruß Snap

Wow. Ich war mir zwar sicher, dass es da was gibt aber mit so etwas elegantem habe ich nicht gerechnet. Wenn ich das richtig verstehe, ist das -Expand das entscheidende Mittelchen? Sprich dadurch bekommt die Pipe einen "Rückgabewert"?

Gruß und Dank
Mitglied: 135333
Solution 135333 Feb 26, 2018 updated at 16:06:45 (UTC)
Goto Top
Der Ablauf ist folgender:
  • CSV-Zeilen werden nach dem Preis sortiert
  • Dann Anhand der Spalte "Gruppe" gruppiert
  • Jede Gruppe wird dann mit einer FOREACH Schleife abgearbeitet
  • In der Schleife wird dann der Preis des ersten Gruppen-Elements der Gruppe auf den Preis des zweiten Gruppenelements gesetzt, da die Elemente bereits nach Preis sortiert sind ist das der niedrigste Wert der Gruppe.
Das
$_.Group | select -Skip 1 -First 1 -Expand Preis
könntest du auch durch ein $_.Group[1].Preis ersetzen, das war nur eine andere Variante.

Hoffe das war verständlich face-smile.
Member: Kraemer
Kraemer Feb 26, 2018 at 16:08:08 (UTC)
Goto Top
Zitat von @135333:
Hoffe das war verständlich face-smile.
ist ja der Hammer. Wenn man doch nur mehr Zeit hätte, sich damit zu beschäftigen, dann hätte man glatt mehr Zeit (Henne / Ei - Problem)