Удаление повторяющихся значений из массива PowerShell

Как удалить дубликаты из массива PowerShell?

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

Ответ 1

Используйте Select-Object (псевдоним которого select) с переключателем -Unique; например.:

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

Ответ 2

Другой вариант - использовать Sort-Object (псевдоним которого - sort, но только в Windows) с
-Unique, который объединяет сортировку с удалением дубликатов:

$a | sort -unique

Ответ 3

$a | sort -unique

Это работает с учетом регистра, поэтому удаляются дубликаты строк с разными регистрами. Решил мою проблему.

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

$ServerList

Вышеуказанные выводы:

FS3
HQ2

Ответ 4

Если список отсортирован, вы можете использовать командлет Get-Unique:

 $a | Get-Unique

Ответ 5

В случае, если вы хотите быть полностью доказанной бомбой, это то, что я бы посоветовал:

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

Вывод:

Apples
Banana

Это использует параметр Property для первой строки Trim(), поэтому лишние пробелы удаляются, а затем выбираются только значения -Unique.

Дополнительная информация о Sort-Object:

Get-Help Sort-Object -ShowWindow

Ответ 6

Используете ли вы SORT -UNIQUE, SELECT -UNIQUE или GET-UNIQUE из Powershell 2.0 до 5.1, все приведенные примеры приведены для массивов с одним столбцом. Мне еще предстоит заставить это функционировать в массивах с несколькими столбцами, чтобы УДАЛИТЬ дублирующиеся строки, чтобы оставить единичные вхождения строки в указанных столбцах, или разработать альтернативное решение сценария. Вместо этого эти командлеты только возвращали строки в массиве, который произошел ОДИН РАЗ в единственном числе и сбрасывали все, что имело дубликат. Обычно мне приходится удалять дубликаты вручную из окончательного вывода CSV в Excel, чтобы завершить отчет, но иногда я хотел бы продолжить работу с указанными данными в Powershell после удаления дубликатов.

Ответ 7

С помощью моего метода вы можете полностью удалить повторяющиеся значения, оставив вас со значениями из массива, в котором было только число 1. Неясно, действительно ли это то, чего действительно хотел ОП, однако мне не удалось найти пример этого решения в Интернете, поэтому вот.

[email protected]'
Bananna
Apple
Carrot
Pear
Apricot
Pear
Bananna
'@ -split '\r\n'

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