2009-09-08 861 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中的所述数据。