반응형
PowerShell 버전 정렬
PowerShell에서 "3.0.1.1", "3.2.1.1" 등 버전이 포함된 문자열 목록이 있는 경우 시스템 방식으로 정렬하려면 어떻게 해야 합니까?버전에서 C#으로 정렬하시겠습니까?
PS C:\> $ver="3.0.1.1","3.2.1.1"
PS C:\> $ver|%{[System.Version]$_}|sort
Major Minor Build Revision
----- ----- ----- --------
3 0 1 1
3 2 1 1
버전으로 변환하고 다음과 같이 정렬합니다.
$list = "3.0.1.1","3.2.1.1"
$sorted = $list | %{ new-object System.Version ($_) } | sort
버전 문자열을 버전 개체에 캐스트할 수 있습니다.sort-object
스크립트 블록을 통과하고 결과를 정렬할 수 있습니다.
PS C:\Users\me> "3.11.0.1", "3.0.1.1", "3.2.1.1" | sort
3.0.1.1
3.11.0.1
3.2.1.1
PS C:\Users\me> "3.11.0.1", "3.0.1.1", "3.2.1.1" | sort {[version] $_}
3.0.1.1
3.2.1.1
3.11.0.1
(예를 실제로 의미 있게 만들기 위해 버전 문자열을 추가했습니다.)
# I needed to sort historical versions (Octopus) with varying decimal formats.
# Try # this (it is easy to add to a more complex expression sort)
# Special Case "3.00.1.10.1.10" and "3.0.1.10.1.10" required the double sort
# to work correctly
$vers = @()`enter code here`
$vers += @( "3.1.60", "3.1.52","3.1.51")
$vers += @( "3.00.46", "3.00.36","3.50.2145.11")
$vers += @( "3.50.2145.10","3.50.2145.9")
$vers += @( "3.50.2145.8", "3.50.2145.7")
$vers += @( "3.50.2145.6", "3.50.2145.5")
$vers += @( "3.50.2145.4", "3.50.2145.3")
$vers += @( "3.50.2145.2", "3.50.2145.1")
$vers += @( "3.50.2145", "3.50.2143")
$vers += @( "3.50.2141", "3.50.2135")
$vers += @( "3.0.1.10.1.1", "3.00.1.10.1.10")
$vers += @( "2.1.3.4", "3.0","3.")
$vers += @( "3.0.1.10.1.100","3.0.1.10.1.10")
$mySortAsc = @{Expression={ [regex]::Replace($_ ,'\d+', { $args[0].Value.PadLeft(20,'0') }) };Descending=$false}
$mySortDesc = @{Expression={ [regex]::Replace($_ ,'\d+', { $args[0].Value.PadLeft(20,'0') }) };Descending=$true}
$nl = [Environment]::NewLine
Write-Output ($nl + "Ascending Sort" + $nl);
$vers | Sort-Object | Sort-Object $mySortAsc
Write-Output ($nl + "Descending Sort" + $nl);
$vers | Sort-Object -Descending | Sort-Object $mySortDesc
<# Result
Ascending Sort
2.1.3.4
3.
3.0
3.0.1.10.1.1
3.0.1.10.1.10
3.00.1.10.1.10
3.0.1.10.1.100
3.00.36
3.00.46
3.1.51
3.1.52
3.1.60
3.50.2135
3.50.2141
3.50.2143
3.50.2145
3.50.2145.1
3.50.2145.2
3.50.2145.3
3.50.2145.4
3.50.2145.5
3.50.2145.6
3.50.2145.7
3.50.2145.8
3.50.2145.9
3.50.2145.10
3.50.2145.11
Descending Sort
3.50.2145.11
3.50.2145.10
3.50.2145.9
3.50.2145.8
3.50.2145.7
3.50.2145.6
3.50.2145.5
3.50.2145.4
3.50.2145.3
3.50.2145.2
3.50.2145.1
3.50.2145
3.50.2143
3.50.2141
3.50.2135
3.1.60
3.1.52
3.1.51
3.00.46
3.00.36
3.0.1.10.1.100
3.00.1.10.1.10
3.0.1.10.1.10
3.0.1.10.1.1
3.0
3.
2.1.3.4
#>
다른 코너 케이스를 추가하자면, powershell은 이 한 자리 수 버전 '2'를 유효하지 않은 것으로 처리합니다.정렬하기 전에 버전 개체를 만들려면 끝에 '.0'을 추가해야 합니다.
if($version -match '^\d$')
{
$version = $version + '.0'
}
New-Object System.Version $version
언급URL : https://stackoverflow.com/questions/711107/sorting-powershell-versions
반응형
'programing' 카테고리의 다른 글
MariaDB 10.2의 utf_8_span_ci colation이 제대로 작동합니까? (0) | 2023.09.04 |
---|---|
이미지를 사용하는 것보다 서클 디브를 만드는 더 쉬운 방법은? (0) | 2023.09.04 |
동일한 디바이저일 때 빠른 AVX512 모듈로 (0) | 2023.09.04 |
PowerShell에서 해시 테이블 병합: 어떻게? (0) | 2023.09.04 |
판다 데이터 프레임에서 사용하는 메모리를 해제하려면 어떻게 해야 합니까? (0) | 2023.09.04 |