Usuwanie zduplikowanych wartości z tablicy programu PowerShell

109

Jak mogę usunąć duplikaty z tablicy PowerShell?

$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
Eric Schoonover
źródło

Odpowiedzi:

193

Użyj Select-Object(którego alias to select) z -Uniqueprzełącznikiem; na przykład:

$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
$a = $a | select -Unique
Keith Hill
źródło
9
To było zbyt proste :-(. W PowerShell 2 możesz również użyć Get-Unique(lub gu), jeśli twoja tablica jest już posortowana.
Joey
2
Johannes, Get-Unique jest dostępny w wersji 1 :)
Shay Levy
2
fajnie, to działa dobrze, tylko uwaga, jeśli chcesz być zwięzły, można ją skrócić nawet do -u. select -uSelect-Object -Unique
Użyłbym
Działa to tylko z jedną cyfrą? W przypadku dużej listy tablic wydaje się, że nie działa.
EagleDev
86

Inną opcją jest użycie Sort-Object(którego alias jest sort, ale tylko w Windows) z
-Uniqueprzełącznikiem, który łączy sortowanie z usuwaniem duplikatów:

$a | sort -unique
Shay Levy
źródło
2
To również rozwiązuje mój następny problem, czyli jak to rozwiązać. Dzięki!
Zarejestrowany użytkownik
2
Ten również wygląda trochę szybciej.
Gneo Pompeo
7

Jeśli chcesz być w pełni bombowcem, radzę to:

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

Wynik:

Apples
Banana

W ten sposób Propertyparametr jest najpierw używany do Trim()tworzenia ciągów, więc dodatkowe spacje są usuwane, a następnie wybiera tylko -Uniquewartości.

Więcej informacji Sort-Object:

Get-Help Sort-Object -ShowWindow
DarkLite1
źródło
1
Świetna odpowiedź. Rozwiązałem mój problem, Get-Uniquenie działa, ponieważ spacje
Kolob Canyon
7
$a | sort -unique

Działa to z rozróżnianiem wielkości liter, dzięki czemu usuwa duplikaty ciągów z różnymi wielkościami. Rozwiązał mój problem.

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

$ServerList

Powyższe wyniki:

FS3
HQ2
Briscomo
źródło
działa to również dobrze w przypadku tablic z wieloma elementami
JoeRod,
4

Jeśli lista jest posortowana, możesz użyć polecenia cmdlet Get-Unique :

 $a | Get-Unique
Martin Brandl
źródło
2
Wymaga to wcześniejszego uporządkowania listy
Johny Skovdal
2

Za pomocą mojej metody możesz całkowicie usunąć zduplikowane wartości, pozostawiając wartości z tablicy, które miały tylko liczbę 1. Nie było jasne, czy tego właśnie chciał OP, ale nie mogłem znaleźć przykładu tego rozwiązania w Internecie, więc tutaj jest.

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

($array | Group-Object -NoElement | ?{$_.count -eq 1}).Name
Będzie
źródło
2

Niezależnie od tego, czy używasz SORT -UNIQUE, SELECT -UNIQUEczy GET-UNIQUEod Powershell 2.0 do 5.1, wszystkie podane przykłady dotyczą pojedynczych tablic kolumnowych. Nie udało mi się jeszcze uzyskać tego, aby działał w tablicach z wieloma kolumnami, aby usunąć zduplikowane wiersze, aby pozostawić pojedyncze wystąpienia wiersza we wspomnianych kolumnach lub opracować alternatywne rozwiązanie skryptowe. Zamiast tego te polecenia cmdlet zwróciły tylko wiersze w tablicy, które wystąpiły RAZ w pojedynczym wystąpieniu i zrzuciły wszystko, co miało duplikat. Zazwyczaj muszę ręcznie usunąć duplikaty z końcowego wyniku CSV w programie Excel, aby ukończyć raport, ale czasami chciałbym kontynuować pracę z tymi danymi w programie Powershell po usunięciu duplikatów.

Christopher M Ramos
źródło
tu przydaje się Where-Object. Najpierw zawężasz listę, używając klauzuli right where, a następnie przesyłasz ją potokiem do obiektu sortowania, wybierasz jedną lub więcej kolumn do sortowania i nadajesz obiektowi sortowania -unikalne.
LPChip