Як я можу видалити дублікати з масиву 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
-u
. select -u
Я використовував би це в командному рядку, але написаний у коді, пропонується використовувати повне формулювання PS:Select-Object -Unique
Іншим варіантом є використання Sort-Object
(псевдонім якого є sort
, але тільки в Windows) з -Unique
комутатором, який поєднує сортування з видаленням дублікатів:
$a | sort -unique
У випадку, якщо ви хочете повністю довести бомбу, це я порадив би:
@('Apples', 'Apples ', 'APPLES', 'Banana') |
Sort-Object -Property @{Expression={$_.Trim()}} -Unique
Вихід:
Apples
Banana
При цьому використовується Property
параметр спочатку Trim()
рядків, тому додаткові пробіли видаляються, а потім вибираються лише -Unique
значення.
Більше інформації про Sort-Object
:
Get-Help Sort-Object -ShowWindow
Get-Unique
не працював, тому що пробіли
$a | sort -unique
Це працює з нечутливою до регістру, тому видаляє дублікати рядків із різними регістрами. Вирішив мою проблему.
$ServerList = @(
"FS3",
"HQ2",
"hq2"
) | sort -Unique
$ServerList
Вищевказані результати:
FS3
HQ2
Якщо список відсортований, ви можете використовувати командлет Get-Unique :
$a | Get-Unique
За допомогою мого методу ви можете повністю видалити повторювані значення, залишаючи вам значення з масиву, який налічував лише 1. Незрозуміло, чи справді цього хотіла ОП, проте я не зміг знайти приклад цього рішення в Інтернеті, так що ось.
$array=@'
Bananna
Apple
Carrot
Pear
Apricot
Pear
Bananna
'@ -split '\r\n'
($array | Group-Object -NoElement | ?{$_.count -eq 1}).Name
Незалежно від того SORT -UNIQUE
, SELECT -UNIQUE
чи використовуєте ви , або GET-UNIQUE
від Powershell 2.0 до 5.1, усі наведені приклади є на масивах одного стовпця. Мені ще потрібно, щоб це функціонувало через масиви з декількома стовпцями, щоб ВИДАЛИТИ повторюваних рядків, щоб залишити поодинокі зустрічі рядка через зазначені стовпці або розробити альтернативне рішення сценарію. Натомість ці командлети повернули лише рядки у масиві, який відбувся ONCE з особливим виникненням та скинув усе, що мав дублікат. Зазвичай мені доводиться видаляти дублікати вручну з остаточного виводу CSV в Excel, щоб закінчити звіт, але іноді я хотів би продовжувати роботу із зазначеними даними в Powershell після видалення дублікатів.
Get-Unique
(абоgu
), якщо ваш масив уже відсортований.