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 -Uniqueprzełącznikiem; na przykład:
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
$a = $a | select -Unique
-u. select -uSelect-Object -Unique
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
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
Get-Uniquenie 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 -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.
Get-Unique(lubgu), jeśli twoja tablica jest już posortowana.