按Powershell中的第二个元素对文本进行排序

Sorting a text by second elem in Powershell

实际上,我写了一个 powershell 脚本,它的输出格式为“[name]: [piece]”(name 表示客户姓名,piece 是实际客户喝的咖啡数量。)这个脚本称为首先.ps1

例如:

乔什:9
山姆:13
标记:2

我的问题是我必须用另一个脚本对这个输出进行排序,就像 C:.\first.ps1 | .\second.ps1 (第二个ps1是我的排序脚本)

在那种情况下 "C: .\first.ps1 | .\second.ps1" 关于前面的例子我的输出应该是这样的

山姆:13
乔什:9
标记:2

我尝试了一些代码,我可以通过管道成功读取输入,但是我有一些排序问题我只能按名称排序我还没有找到任何可以按数字排序的东西

这是我目前试过的代码

$input | %{

     $name=$_.split(":")[0]
     $piece=[int]$_.split(":")[1]
     Write-Output $name" "$piece

} | sort -Descending

提前致谢

您的第一个脚本实际上不是脚本,因为它不包含任何代码。 ;-) 我们称之为数据。 你可以创建一个 [PSCustomObject] 并使用它的属性来按照你喜欢的方式排序......像这样:

$data = Get-Content -Path C:\sample\data.txt

$data | 
    ForEach-Object {
        $row = $PSItem -split ':'
        [PSCustomObject]@{
            Name        = $row[0].Trim()
            CoffeeCount = [int]$row[1].Trim()
        }
    } |
        Sort-Object -Property CoffeeCount -Descending

同时我找到了另一个解决方案并且工作正常

 $input | Sort-Object {[int]$_.split(":")[1]} -Descending| %{


     $name=$_.split(":")[0]
     $piece=[int]$_.split(":")[1]
     Write-Output $name" "$piece
     } 
$Input | ConvertFrom-Csv -Delimiter ":" -Header Name, Piece | sort {[int]$_.Piece} -Descending