Suppression des valeurs en double d'un tableau PowerShell


Réponses:


193

Utilisez Select-Object(dont l'alias est select) avec le -Uniquecommutateur; par exemple:

$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
$a = $a | select -Unique

9
C'était trop simple :-(. Dans PowerShell 2, vous pouvez également utiliser Get-Unique(ou gu) si votre tableau est déjà trié.
Joey

2
Johannes, Get-Unique est disponible en v1 :)
Shay Levy

2
cool, cela fonctionne bien, juste une note, si vous voulez être concis, cela pourrait même être raccourci -u. select -uJ'utiliserais ceci sur une ligne de commande, mais écrit dans un code, il est suggéré d'utiliser le libellé PS complet:Select-Object -Unique
papo

Cela ne fonctionne qu'avec un seul chiffre? Pour une grande liste de tableaux, cela ne semble pas fonctionner.
EagleDev

86

Une autre option consiste à utiliser Sort-Object(dont l'alias est sort, mais uniquement sous Windows) avec le
-Uniquecommutateur, qui combine le tri et la suppression des doublons:

$a | sort -unique

2
Cela résout également mon prochain problème, à savoir comment le trier. Merci!
Utilisateur enregistré

2
Celui-ci a également l'air un peu plus rapide.
Gneo Pompeo

7

Au cas où vous voudriez être complètement bombardé, voici ce que je vous conseillerais:

@('Apples', 'Apples ', 'APPLES', 'Banana') | 
    Sort-Object -Property @{Expression={$_.Trim()}} -Unique

Production:

Apples
Banana

Cela utilise le Propertyparamètre pour commencer par Trim()les chaînes, donc les espaces supplémentaires sont supprimés, puis ne sélectionne que les -Uniquevaleurs.

Plus d'infos sur Sort-Object:

Get-Help Sort-Object -ShowWindow

1
Réponse géniale. Résolu mon problème, Get-Uniquen'a pas fonctionné parce que les espaces
Kolob Canyon

7
$a | sort -unique

Cela fonctionne avec insensible à la casse, supprimant ainsi les chaînes en double avec des cas différents. J'ai résolu mon problème.

$ServerList = @(
    "FS3",
    "HQ2",
    "hq2"
) | sort -Unique

$ServerList

Les sorties ci-dessus:

FS3
HQ2

cela fonctionne également bien pour les tableaux avec plusieurs membres
JoeRod


2

Avec ma méthode, vous pouvez supprimer complètement les valeurs en double, vous laissant avec des valeurs du tableau qui ne comptaient que 1. Il n'était pas clair si c'était ce que l'OP voulait réellement, mais je n'ai pas pu trouver un exemple de cette solution en ligne, donc C'est ici.

$array=@'
Bananna
Apple
Carrot
Pear
Apricot
Pear
Bananna
'@ -split '\r\n'

($array | Group-Object -NoElement | ?{$_.count -eq 1}).Name

2

Que vous utilisiez SORT -UNIQUE, SELECT -UNIQUEou GET-UNIQUEde Powershell 2.0 à 5.1, tous les exemples donnés sont sur des tableaux de colonnes simples. Je n'ai pas encore réussi à faire fonctionner cela sur des tableaux avec plusieurs colonnes pour SUPPRIMER les lignes en double pour laisser des occurrences uniques d'une ligne à travers lesdites colonnes, ou développer une solution de script alternative. Au lieu de cela, ces applets de commande n'ont renvoyé que des lignes dans un tableau qui se sont produites UNE FOIS avec une occurrence singulière et ont vidé tout ce qui avait un doublon. En règle générale, je dois supprimer les doublons manuellement de la sortie CSV finale dans Excel pour terminer le rapport, mais parfois je voudrais continuer à travailler avec lesdites données dans Powershell après avoir supprimé les doublons.


c'est là que le Where-Object est utile. Vous réduisez d'abord la liste en utilisant la clause where right, puis dirigez-la vers un objet de tri, sélectionnez une ou plusieurs colonnes à trier et donnez à l'objet de tri un -unique.
LPChip
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.