Usuwanie zduplikowanych wartości z tablicy programu PowerShell


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

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

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

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

działa to również dobrze w przypadku tablic z wieloma elementami
JoeRod,


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

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.