Como posso remover duplicatas de uma matriz do PowerShell?
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
Como posso remover duplicatas de uma matriz do PowerShell?
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
Respostas:
Use Select-Object
(cujo alias é select
) com o -Unique
switch; por exemplo:
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
$a = $a | select -Unique
-u
. select -u
Eu usaria isso em uma linha de comando, mas escrito em um código, é sugerido usar o texto PS completo:Select-Object -Unique
Outra opção é usar Sort-Object
(cujo alias é sort
, mas apenas no Windows) com a -Unique
opção, que combina classificação com remoção de duplicatas:
$a | sort -unique
No caso de você querer ser totalmente comprovado, este é o meu conselho:
@('Apples', 'Apples ', 'APPLES', 'Banana') |
Sort-Object -Property @{Expression={$_.Trim()}} -Unique
Resultado:
Apples
Banana
Isso usa o Property
parâmetro para primeiro Trim()
as strings, de modo que os espaços extras são removidos e, a seguir, seleciona apenas os -Unique
valores.
Mais informações em Sort-Object
:
Get-Help Sort-Object -ShowWindow
Get-Unique
não funcionou porque os espaços
$a | sort -unique
Isso funciona com diferenciação de maiúsculas e minúsculas, removendo, portanto, strings duplicadas com maiúsculas e minúsculas. Resolveu meu problema.
$ServerList = @(
"FS3",
"HQ2",
"hq2"
) | sort -Unique
$ServerList
Os resultados acima:
FS3
HQ2
Se a lista estiver classificada, você pode usar o cmdlet Get-Unique :
$a | Get-Unique
Com o meu método, você pode remover completamente os valores duplicados, deixando-o com valores da matriz que só tinham uma contagem de 1. Não estava claro se isso era o que o OP realmente queria, mas não consegui encontrar um exemplo dessa solução online, então Aqui está.
$array=@'
Bananna
Apple
Carrot
Pear
Apricot
Pear
Bananna
'@ -split '\r\n'
($array | Group-Object -NoElement | ?{$_.count -eq 1}).Name
Esteja você usando SORT -UNIQUE
, SELECT -UNIQUE
ou GET-UNIQUE
do Powershell 2.0 ao 5.1, todos os exemplos dados estão em matrizes de coluna única. Ainda preciso fazer isso funcionar em matrizes com várias colunas para REMOVER linhas duplicadas para deixar ocorrências únicas de uma linha entre essas colunas ou desenvolver uma solução de script alternativa. Em vez disso, esses cmdlets retornaram apenas linhas em uma matriz que ocorreu UMA VEZ com ocorrência singular e despejou tudo que tinha uma duplicata. Normalmente, tenho que remover as duplicatas manualmente da saída CSV final no Excel para concluir o relatório, mas às vezes gostaria de continuar trabalhando com esses dados no Powershell depois de remover as duplicatas.
Get-Unique
(ougu
) se sua matriz já estiver classificada.