web-dev-qa-db-ja.com

PowerShell配列から重複する値を削除する

PowerShell配列から重複を削除するにはどうすればよいですか?

$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
99
Eric Schoonover

Select-Object (エイリアスはselect)を-Uniqueスイッチと共に使用します。例えば。:

$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
$a = $a | select -Unique
170
Keith Hill

別のオプションは Sort-Object (エイリアスはsortですが、Windowsのみ)を使用することです
-Uniqueスイッチ。ソートと重複の除去を組み合わせます。

$a | sort -unique
81
Shay Levy
$a | sort -unique

これは大文字と小文字を区別しないため、大文字と小文字が異なる重複文字列を削除します。私の問題を解決しました。

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

$ServerList

上記の出力:

FS3
HQ2
6
Briscomo

あなたが完全に爆弾を証明したい場合、これは私がアドバイスするものです:

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

出力:

Apples
Banana

これはPropertyパラメーターを使用して最初に文字列をTrim()するため、余分なスペースが削除され、-Unique値のみが選択されます。

Sort-Objectの詳細:

Get-Help Sort-Object -ShowWindow
4
DarkLite1

リストが並べ替えられている場合は、 Get-Unique コマンドレットを使用できます。

 $a | Get-Unique
4
Martin Brandl

Powershell 2.0から5.1でSORT -UNIQUESELECT -UNIQUEまたはGET-UNIQUEを使用しているかどうかにかかわらず、与えられた例はすべて単一の列配列にあります。 REMOVE複数の列を持つ配列全体でこれを機能させて、列の単一の出現を残すために行を複製するか、代替のスクリプトソリューションを開発する必要があります。代わりに、これらのコマンドレットは、1回だけ発生した配列内の行のみを返し、重複したものをすべてダンプしました。通常、Excelの最終CSV出力から重複を手動で削除してレポートを終了する必要がありますが、重複を削除した後、Powershell内で上記のデータを引き続き使用したい場合があります。

2

私の方法を使用すると、重複する値を完全に削除して、カウントが1のみの配列から値を残すことができます。ここにあります。

$array=@'
Bananna
Apple
Carrot
Pear
Apricot
Pear
Bananna
'@ -split '\r\n'

($array | Group-Object -NoElement | ?{$_.count -eq 1}).Name
1
Will