Jak mogę usunąć duplikaty z tablicy PowerShell?
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
Jak mogę usunąć duplikaty z tablicy PowerShell?
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
Odpowiedzi:
Użyj Select-Object
(którego alias to select
) z -Unique
przełącznikiem; na przykład:
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
$a = $a | select -Unique
-u
. select -u
Select-Object -Unique
Inną opcją jest użycie Sort-Object
(którego alias jest sort
, ale tylko w Windows) z -Unique
przełącznikiem, który łączy sortowanie z usuwaniem duplikatów:
$a | sort -unique
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 Property
parametr jest najpierw używany do Trim()
tworzenia ciągów, więc dodatkowe spacje są usuwane, a następnie wybiera tylko -Unique
wartości.
Więcej informacji Sort-Object
:
Get-Help Sort-Object -ShowWindow
Get-Unique
nie działa, ponieważ spacje
$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
Jeśli lista jest posortowana, możesz użyć polecenia cmdlet Get-Unique :
$a | Get-Unique
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
Niezależnie od tego, czy używasz SORT -UNIQUE
, SELECT -UNIQUE
czy GET-UNIQUE
od 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.
Get-Unique
(lubgu
), jeśli twoja tablica jest już posortowana.