Wie kann ich Duplikate aus einem PowerShell-Array entfernen?
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
Wie kann ich Duplikate aus einem PowerShell-Array entfernen?
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
Antworten:
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
-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
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
$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
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
Get-Uniqueweil Räume nicht funktionierten
Wenn die Liste sortiert ist, können Sie das Cmdlet Get-Unique verwenden:
$a | Get-Unique
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.
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
Get-Unique(odergu) verwenden, wenn Ihr Array bereits sortiert ist.