Как удалить дубликаты из массива PowerShell?
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
Как удалить дубликаты из массива PowerShell?
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
Используйте Select-Object
(псевдоним которого select
) с переключателем -Unique
; например.:
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
$a = $a | select -Unique
Другой вариант - использовать Sort-Object
(псевдоним которого - sort
, но только в Windows) с -Unique
, который объединяет сортировку с удалением дубликатов:
$a | sort -unique
$a | sort -unique
Это работает с учетом регистра, поэтому удаляются дубликаты строк с разными регистрами. Решил мою проблему.
$ServerList = @(
"FS3",
"HQ2",
"hq2"
) | sort -Unique
$ServerList
Вышеуказанные выводы:
FS3
HQ2
Если список отсортирован, вы можете использовать командлет Get-Unique:
$a | Get-Unique
В случае, если вы хотите быть полностью доказанной бомбой, это то, что я бы посоветовал:
@('Apples', 'Apples ', 'APPLES', 'Banana') |
Sort-Object -Property @{Expression={$_.Trim()}} -Unique
Вывод:
Apples
Banana
Это использует параметр Property
для первой строки Trim()
, поэтому лишние пробелы удаляются, а затем выбираются только значения -Unique
.
Дополнительная информация о Sort-Object
:
Get-Help Sort-Object -ShowWindow
Используете ли вы SORT -UNIQUE
, SELECT -UNIQUE
или GET-UNIQUE
из Powershell 2.0 до 5.1, все приведенные примеры приведены для массивов с одним столбцом. Мне еще предстоит заставить это функционировать в массивах с несколькими столбцами, чтобы УДАЛИТЬ дублирующиеся строки, чтобы оставить единичные вхождения строки в указанных столбцах, или разработать альтернативное решение сценария. Вместо этого эти командлеты только возвращали строки в массиве, который произошел ОДИН РАЗ в единственном числе и сбрасывали все, что имело дубликат. Обычно мне приходится удалять дубликаты вручную из окончательного вывода CSV в Excel, чтобы завершить отчет, но иногда я хотел бы продолжить работу с указанными данными в Powershell после удаления дубликатов.
С помощью моего метода вы можете полностью удалить повторяющиеся значения, оставив вас со значениями из массива, в котором было только число 1. Неясно, действительно ли это то, чего действительно хотел ОП, однако мне не удалось найти пример этого решения в Интернете, поэтому вот.
[email protected]'
Bananna
Apple
Carrot
Pear
Apricot
Pear
Bananna
'@ -split '\r\n'
($array | Group-Object -NoElement | ?{$_.count -eq 1}).Name