2009-09-08 149 views

回答

138

使用Select -uniq例如爲:

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

這太容易了:-(。在PowerShell 2中,如果你的數組已經排序,你也可以使用'Get-Unique'(或'gu')。 – Joey 2009-09-08 05:30:18

+2

Johannes,Get-Unique可用於v1 :) – 2009-09-08 06:58:02

62

另一種選擇:

$a | sort -unique 
+1

This也解決了我的下一個問題,那就是如何分類。謝謝! – 2012-05-18 16:38:04

+1

這一個也看起來更快一點。 – 2014-05-22 18:10:41

2

如果列表進行排序,你可以使用Get-Unique的cmdlet:

$a | Get-Unique 
+2

它需要事先對列表進行排序 – 2016-08-30 20:21:02

3
$a | sort -unique 

這適用於不區分大小寫,因此刪除具有不同情況的重複字符串。解決了我的問題。

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

$ServerList 

FS3 

HQ2 
1

如果你想充分轟炸證明,這是我的建議是:

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

輸出:

Apples 
Banana 

它使用Property參數先Trim()字符串,所以多餘的空格被刪除,然後只選擇-Unique值。

Sort-Object

更多信息:

Get-Help Sort-Object -ShowWindow 
+0

真棒回答。解決了我的問題,'Get-Unique'沒有工作,因爲空間 – 2017-11-01 20:29:33

+0

不客氣,很高興它幫助:) – DarkLite1 2017-11-02 10:48:15

0

無論您使用 「SORT -unique」, 「選擇 - 獨特的」 或 「GET-UNIQUE」 從Powershell的2.0到5.1,給出的所有例子都在單列數組。我還沒有得到這個在具有多個列的數組上運行以刪除重複行以跨所述列留下一行的單個事件,或者開發另一個腳本解決方案。相反,這些cmdlet只返回一個數組中發生的單行事件,並且拋出所有重複的行。通常,我必須手動從Excel中的最終CSV輸出中刪除重複項以完成報告,但有時我想在刪除重複項後繼續使用Powershell中的所述數據。