Entfernen doppelter Werte aus einem PowerShell-Array


Antworten:


192

Verwenden Sie Select-Object(dessen Alias ​​ist select) mit dem -UniqueSchalter; z.B:

$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
$a = $a | select -Unique

9
Das war zu einfach :-(. In PowerShell 2 können Sie auch Get-Unique(oder gu) verwenden, wenn Ihr Array bereits sortiert ist.
Joey

2
Johannes, Get-Unique ist in Version 1 verfügbar :)
Shay Levy

2
cool, das funktioniert gut, nur ein Hinweis, wenn Sie prägnant sein wollen, könnte es sogar verkürzt werden -u. select -uIch würde dies auf einer Befehlszeile verwenden, aber in einem Code geschrieben, wird empfohlen, den vollständigen PS-Wortlaut zu verwenden:Select-Object -Unique
Papo

Dies funktioniert nur mit einer Ziffer? Für eine große Liste von Arrays scheint es nicht zu funktionieren.
EagleDev

84

Eine andere Option ist die Verwendung Sort-Object(deren Alias ​​ist sort, aber nur unter Windows) mit dem
-UniqueSchalter, der das Sortieren mit dem Entfernen von Duplikaten kombiniert:

$a | sort -unique

2
Dies löst auch mein nächstes Problem: Wie sortiere ich es? Vielen Dank!
Registrierter Benutzer

2
Dieser sieht auch ein bisschen schneller aus.
Gneo Pompeo

7
$a | sort -unique

Dies funktioniert ohne Berücksichtigung der Groß- und Kleinschreibung. Daher werden doppelte Zeichenfolgen mit unterschiedlichen Groß- und Kleinschreibung entfernt. Mein Problem gelöst.

$ServerList = @(
    "FS3",
    "HQ2",
    "hq2"
) | sort -Unique

$ServerList

Die obigen Ausgaben:

FS3
HQ2

Dies funktioniert auch gut für Arrays mit mehreren Mitgliedern
JoeRod

6

Für den Fall, dass Sie vollständig bombenbeweis sein wollen, würde ich Folgendes raten:

@('Apples', 'Apples ', 'APPLES', 'Banana') | 
    Sort-Object -Property @{Expression={$_.Trim()}} -Unique

Ausgabe:

Apples
Banana

Dies verwendet den PropertyParameter, um zuerst Trim()die Zeichenfolgen zu erstellen, sodass zusätzliche Leerzeichen entfernt werden und dann nur die -UniqueWerte ausgewählt werden.

Weitere Infos zu Sort-Object:

Get-Help Sort-Object -ShowWindow

1
Tolle Antwort. Mein Problem wurde gelöst, Get-Uniqueweil Räume nicht funktionierten
Kolob Canyon


2

Egal , ob Sie mit SORT -UNIQUE, SELECT -UNIQUEoder GET-UNIQUEvon Powershell 2,0-5,1, alle Beispiele gegeben sind auf einzelne Spalten - Arrays. Ich muss dies noch für Arrays mit mehreren Spalten verwenden, um doppelte Zeilen zu entfernen , um einzelne Vorkommen einer Zeile in diesen Spalten zu belassen , oder um eine alternative Skriptlösung zu entwickeln. Stattdessen haben diese Cmdlets nur Zeilen in einem Array zurückgegeben, die EINMAL mit einem einzelnen Vorkommen aufgetreten sind, und alles ausgegeben, was ein Duplikat hatte. Normalerweise muss ich Duplikate manuell aus der endgültigen CSV-Ausgabe in Excel entfernen, um den Bericht fertigzustellen. Manchmal möchte ich jedoch nach dem Entfernen der Duplikate mit diesen Daten in Powershell weiterarbeiten.


Hier bietet sich das Where-Object an. Sie schränken die Liste zuerst ein, indem Sie die rechts-where-Klausel verwenden, sie dann an ein Sortierobjekt weiterleiten, eine oder mehrere Spalten zum Sortieren auswählen und dem Sortierobjekt eine Eindeutigkeit geben.
LPChip

1

Mit meiner Methode können Sie doppelte Werte vollständig entfernen und so Werte aus dem Array erhalten, die nur eine Zählung von 1 hatten. Es war nicht klar, ob dies das ist, was das OP tatsächlich wollte, aber ich konnte online kein Beispiel für diese Lösung finden hier ist es.

$array=@'
Bananna
Apple
Carrot
Pear
Apricot
Pear
Bananna
'@ -split '\r\n'

($array | Group-Object -NoElement | ?{$_.count -eq 1}).Name
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.