¿Cómo puedo eliminar duplicados de una matriz de PowerShell?
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
¿Cómo puedo eliminar duplicados de una matriz de PowerShell?
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
Respuestas:
Use Select-Object
(cuyo alias es select
) con el -Unique
interruptor; p.ej:
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
$a = $a | select -Unique
-u
. select -u
Select-Object -Unique
Otra opción es usar Sort-Object
(cuyo alias es sort
, pero solo en Windows) con el -Unique
interruptor, que combina la clasificación con la eliminación de duplicados:
$a | sort -unique
En caso de que quiera ser una prueba de bomba completa, esto es lo que le aconsejaría:
@('Apples', 'Apples ', 'APPLES', 'Banana') |
Sort-Object -Property @{Expression={$_.Trim()}} -Unique
Salida:
Apples
Banana
Esto usa el Property
parámetro para primero Trim()
las cadenas, por lo que los espacios adicionales se eliminan y luego selecciona solo los -Unique
valores.
Más información sobre Sort-Object
:
Get-Help Sort-Object -ShowWindow
Get-Unique
no funcionó porque hay espacios
$a | sort -unique
Esto funciona con mayúsculas y minúsculas, por lo que elimina cadenas duplicadas con diferentes casos. Resolvió mi problema.
$ServerList = @(
"FS3",
"HQ2",
"hq2"
) | sort -Unique
$ServerList
Los resultados anteriores:
FS3
HQ2
Si la lista está ordenada, puede usar el cmdlet Get-Unique :
$a | Get-Unique
Con mi método, puede eliminar por completo los valores duplicados, dejándolo con valores de la matriz que solo tenían un recuento de 1. No estaba claro si esto era lo que realmente quería el OP, sin embargo, no pude encontrar un ejemplo de esta solución en línea, así que aquí está.
$array=@'
Bananna
Apple
Carrot
Pear
Apricot
Pear
Bananna
'@ -split '\r\n'
($array | Group-Object -NoElement | ?{$_.count -eq 1}).Name
Ya sea que esté utilizando SORT -UNIQUE
, SELECT -UNIQUE
o GET-UNIQUE
de Powershell 2.0 a 5.1, todos los ejemplos dados están en matrices de una sola columna. Todavía tengo que hacer que esto funcione en matrices con múltiples columnas para ELIMINAR filas duplicadas para dejar apariciones únicas de una fila en dichas columnas, o desarrollar una solución de script alternativa. En cambio, estos cmdlets solo han devuelto filas en una matriz que se produjeron UNA VEZ con una aparición singular y volcaron todo lo que tenía un duplicado. Por lo general, tengo que Eliminar duplicados manualmente de la salida CSV final en Excel para finalizar el informe, pero a veces me gustaría seguir trabajando con dichos datos dentro de Powershell después de eliminar los duplicados.
Get-Unique
(ogu
) si su matriz ya está ordenada.