PowerShell dizisinden kopyaları nasıl kaldırabilirim?
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
PowerShell dizisinden kopyaları nasıl kaldırabilirim?
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
Yanıtlar:
Anahtarla Select-Object
(kimin takma adıdır select
) kullanın -Unique
; Örneğin:
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
$a = $a | select -Unique
-u
. select -u
Bunu bir komut satırında kullanırdım, ancak bir kodla yazılırsa, tam PS ifadesini kullanmanız önerilir:Select-Object -Unique
Diğer bir seçenek de Sort-Object
(takma adı sort
yalnızca Windows'ta olan) -Unique
anahtarla birlikte kullanmaktır; bu anahtar, sıralamayı yinelenenlerin kaldırılmasıyla birleştirir:
$a | sort -unique
Tamamen bomba ispat etmek istemeniz durumunda, tavsiye edeceğim şey bu:
@('Apples', 'Apples ', 'APPLES', 'Banana') |
Sort-Object -Property @{Expression={$_.Trim()}} -Unique
Çıktı:
Apples
Banana
Bu, Property
önce Trim()
dizeleri kullanmak için parametreyi kullanır , böylece fazladan boşluklar kaldırılır ve sonra yalnızca -Unique
değerleri seçer .
Daha fazla bilgi Sort-Object
:
Get-Help Sort-Object -ShowWindow
Get-Unique
işe yaramadı çünkü boşluklar
$a | sort -unique
Bu, büyük / küçük harfe duyarlı değildir, bu nedenle farklı durumlara sahip yinelenen dizeleri kaldırır. Sorunumu çözdüm.
$ServerList = @(
"FS3",
"HQ2",
"hq2"
) | sort -Unique
$ServerList
Yukarıdaki çıktılar:
FS3
HQ2
Liste sıralanırsa, Get-Unique cmdlet'ini kullanabilirsiniz:
$a | Get-Unique
Yöntemimle, yinelenen değerleri tamamen kaldırabilir ve sizi diziden yalnızca 1 sayıya sahip değerlerle bırakabilirsiniz. OP'nin gerçekte istediği şeyin bu olup olmadığı açık değildi, ancak bu çözümün bir örneğini çevrimiçi olarak bulamadım bu yüzden işte burada.
$array=@'
Bananna
Apple
Carrot
Pear
Apricot
Pear
Bananna
'@ -split '\r\n'
($array | Group-Object -NoElement | ?{$_.count -eq 1}).Name
Hangisini kullanıyor olursanız olun SORT -UNIQUE
, SELECT -UNIQUE
ya GET-UNIQUE
Powershell 2.0 ila 5.1, verilen tüm örnekler tek sütun diziler vardır. Bunu, söz konusu Sütunlar arasında bir Satırın tek bir oluşumunu bırakmak veya alternatif bir komut dosyası çözümü geliştirmek için Yinelenen Satırları KALDIRMAK için birden fazla Sütunlu Diziler arasında işlev görmesi için henüz almadım . Bunun yerine, bu cmdlet'ler yalnızca tek bir oluşumla bir KEZ meydana gelen ve yinelenen her şeyi atan bir Dizideki Satırları döndürdü. Genellikle raporu bitirmek için Excel'deki son CSV çıktısından Yinelemeleri manuel olarak Kaldırmam gerekir, ancak bazen yinelenenleri kaldırdıktan sonra Powershell içinde söz konusu verilerle çalışmaya devam etmek isterim.
Get-Unique
(veyagu
) öğesini de kullanabilirsiniz .