PowerShell 배열에서 중복 값 제거


답변:


193

Select-Object(별명이 인 select) -Unique스위치 와 함께 사용하십시오 . 예 :

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

9
너무 쉬웠습니다 :-(. PowerShell 2에서는 배열이 이미 정렬 된 경우 Get-Unique(또는 gu)을 사용할 수도 있습니다 .
Joey

2
Johannes, Get-Unique는 v1에서 사용할 수 있습니다. :)
Shay Levy

2
멋지다, 이것은 잘 작동한다. 단지 노트이다. 간결하게하고 싶다면 -u. select -u나는 이것을 명령 줄에서 사용하지만 코드로 작성하면 전체 PS 문구를 사용하는 것이 좋습니다.Select-Object -Unique
papo

이것은 한 자리 숫자로만 작동합니까? 큰 배열 목록의 경우 작동하지 않는 것 같습니다.
EagleDev

85

또 다른 옵션은 Sort-Object(별명이 sort이지만 Windows에서만)
-Unique스위치 와 함께 사용하는 것입니다.이 스위치는 정렬과 중복 제거를 결합합니다.

$a | sort -unique

2
이것은 또한 내가 그것을 정렬하는 방법에 대한 나의 다음 문제를 해결합니다. 감사!
등록 사용자

2
이것은 또한 조금 더 빠르게 보입니다.
Gneo Pompeo 2014

7

당신이 완전히 폭탄을 증명하고 싶다면, 이것이 내가 조언하고 싶은 것입니다.

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

산출:

Apples
Banana

Property매개 변수를 먼저 Trim()문자열에 사용하므로 추가 공백이 제거 된 다음 -Unique값만 선택됩니다 .

자세한 정보 Sort-Object:

Get-Help Sort-Object -ShowWindow

1
멋진 대답입니다. 내 문제 해결, Get-Unique공간 때문에 작동하지 않음
Kolob Canyon

7
$a | sort -unique

이것은 대소 문자를 구분하지 않고 작동하므로 대소 문자가 다른 중복 문자열을 제거합니다. 내 문제를 해결했습니다.

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

$ServerList

위의 출력 :

FS3
HQ2

이것은 또한 여러 멤버가있는 어레이에서도 잘 작동합니다.
JoeRod


2

내 방법을 사용하면 중복 값을 완전히 제거하여 1의 개수 만있는 배열의 값을 남길 수 있습니다. 이것이 OP가 실제로 원하는 것인지 확실하지 않지만 온라인에서이 솔루션의 예를 찾을 수 없었기 때문에 여기있어.

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

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

2

사용하든 SORT -UNIQUE, SELECT -UNIQUE또는 GET-UNIQUE파워 쉘 2.0에서 5.1로, 주어진 모든 예제는 단일 열 배열에 있습니다. 나는이 열이 여러 열이있는 배열에서 작동하도록하여 중복 행을 제거 하여 해당 열에서 행이 한 번만 발생하도록하거나 대체 스크립트 솔루션을 개발 하지 못했습니다 . 대신 이러한 cmdlet은 단일 발생으로 한 번 발생한 배열의 행만 반환하고 중복 된 모든 항목을 덤프했습니다. 일반적으로 보고서를 완료하려면 Excel의 최종 CSV 출력에서 ​​중복을 수동으로 제거해야하지만 중복을 제거한 후 Powershell 내에서 해당 데이터로 계속 작업하고 싶습니다.


이것은 Where-Object가 유용한 곳입니다. 먼저 오른쪽 where 절을 사용하여 목록을 좁힌 다음 정렬 개체로 파이프하고 정렬 할 열을 하나 이상 선택한 다음 정렬 개체에 고유 한 값을 지정합니다.
LPChip
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.