emeriks
Goto Top

Powershell - Objekte - Group-Object - tabellarisch

Hi,
ich suche ein Vereinfachung meines Codes. Einen "Einzeiler" o.ä.

Ich erstelle ein Array mit Objekten. Die Daten der Objekte werden aus Textdateien eingelesen.

Bsp.: (vereinfacht)
$O = @()

... for each line ....
$O += New-Object -TypeName PSObject -Property @{
   "Gruppe" = $Line.Field1  
   "Wert" = $Line.Field2  
}
... next line

Nun will ich das Array als Tabelle ausgeben, in welcher die Elemente nach "Gruppe" gruppiert und die Summen je für Vorkommen von "AAA", "BBB", "CCC" usw. in "Wert" ausgegeben werden.

Mittels
$0 | ?{ $_.Wert -eq "AAA" } | Group-Object Gruppe | FT Name,Count  
bekomme ich es z.B. hin, dass er mir alle Elemente je Gruppenname summiert, bei welchen "Wert" = "AAA" ist. Da kommt dann z.B. raus

Name        Count
----        ---
Gruppe1        17
Gruppe2        3
Gruppe3        4
usw.

Nun will ich aber haben:
Name        AAA        BBB        CCC
----        ---
Gruppe1        17        33        8
Gruppe2        3        99        15
Gruppe3        4        24        13
usw.

Ich habe das jetzt so gelöst, dass ich je Kriterium ("AAA", "BBB", "CCC", ...) eine Auswertung mit "Group-Object" fahre, mit deren Ergebnisse neue Objekte füttere (im Array) und dieses Object-Array dann als Tabelle ausgebe.

Ich hoffe, dass das einfacher geht.

Könnt Ihr mir folgen und hat jemand ne Idee?

E.

Content-Key: 385790

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

Ausgedruckt am: 29.03.2024 um 11:03 Uhr

Mitglied: colinardo
colinardo 07.09.2018 aktualisiert um 19:03:27 Uhr
Goto Top
Servus.
Beispiel für dich zum zerpflücken:
# Kriterien
$kriterien = 'AAA','BBB','CCC'  

# Beispieldaten
$O = @'  
Gruppe;Wert
Gruppe1;AAA
Gruppe1;AAA
Gruppe1;BBB
Gruppe2;CCC
Gruppe2;BBB
Gruppe2;BBB
Gruppe2;BBB
Gruppe3;AAA
Gruppe3;AAA
Gruppe3;CCC
Gruppe4;XXX
'@ | ConvertFrom-CSV -Delimiter ";"  

# Hashtable mit Kriterien erstellen (dient zum Erstellen der Object Member)
$cols = @{}; $kriterien | %{$cols.$_ = 0}

# Nach Gruppe gruppieren
$O | group Gruppe -Pipe gruppen | Add-Member -NotePropertyMembers $cols -PassThru | %{
    # Items der Gruppe nach Wert gruppieren und nur die übernehmen die in den Kriterien vorhanden sind und die Anzahl in das Object schreiben
    $_.Group | group Wert | ?{$_.Name -in $kriterien} | %{$gruppen.($_.Name) = $_.Count}
    $_
} | ft (@("Name") + $kriterien)  
Ob das jetzt für dich "einfacher" ist musst du selbst entscheiden face-smile. Das kann man natürlich nach Lust und Laune abwandeln.

Grüße Uwe
Mitglied: emeriks
emeriks 10.09.2018 um 08:24:03 Uhr
Goto Top
Danke, Uwe.
Einiges davon sieht zwar etwas kryptisch für mich aus face-wink aber ich denke, es könnte helfen. Und wenn "nur" als Lernbeispiel.
Mitglied: mayho33
mayho33 25.02.2019 um 11:14:26 Uhr
Goto Top
eventuell könnte Format-Table dabei helfen (ungetestet) ?

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...

Mayho