在 powershell 中对未命名的整数列进行排序

Sorting an unnamed integer column in powershell

我很乐意在 powershell 中对如下所示的 csv 进行排序:

0.980242;DATABASE_PICTURES/P1040793.JPG
0.167471;DATABASE_PICTURES/P1040805.JPG
0.133792;DATABASE_PICTURES/P1040808.JPG
0.616142;DATABASE_PICTURES/P1040819.JPG
0.0485409;DATABASE_PICTURES/P1040825.JPG
0.17998;DATABASE_PICTURES/P1040826.JPG
0.0428832;DATABASE_PICTURES/P1040837.JPG
0.713708;DATABASE_PICTURES/P7020228.JPG
1;DATABASE_PICTURES//P7020229.JPG

我想在第一列中从最高到最低对列表进行排序 -->

1;DATABASE_PICTURES//P7020229.JPG
0.980242;DATABASE_PICTURES/P1040793.JPG
0.713708;DATABASE_PICTURES/P7020228.JPG
0.616142;DATABASE_PICTURES/P1040819.JPG
and so on

我试过这个脚本

Import-CSV C:\xampp\htdocs\results\result.csv -Header ('foo', 'bar') -delimiter ';' | Sort-Object foo

但它什么也没做。我还研究了一半的 internetz,但是 none 给定的代码对我有用或有意义。有人可以给我提示吗?

只是为了在这里得到答案,因为到目前为止还没有人知道。

您遇到的问题不是排序不起作用,而是它按字母顺序排序,而不是像您期望的那样按数字排序。

Foo                                                                                                                                                                         
---                                                                                                                                                                         
0.0428832                                                                                                                                                                   
0.0485409                                                                                                                                                                   
0.133792                                                                                                                                                                    
0.167471                                                                                                                                                                    
0.17998                                                                                                                                                                     
0.616142                                                                                                                                                                    
0.713708                                                                                                                                                                    
0.980242                                                                                                                                                                    
1        

当使用 Import-CSV 导入所有属性时,它们被键入为字符串。来自 Get-Member

的输出
Bar         NoteProperty System.String Bar=DATABASE_PICTURES/P1040793.JPG
Foo         NoteProperty System.String Foo=0.980242      

根据您代码的其他需求,您可以简单地使用@PetSerAI 的建议并将其转换为排序。

`| Sort-Object {[double]$_.Foo} -Descending`

如果您对该数据还有其他事情要做,那么在导入后更改其类型可能是一个优势,这样您就不必进行多次转换。

$data = Import-CSV C:\xampp\htdocs\results\result.csv -Header ('foo', 'bar') -delimiter ';' | 
    Select-Object -ExcludeProperty Foo @{Name="Foo";Expression={[double]$_.Foo}},* 
$data | Sort-Object foo -Descending

我会假设你有更多的属性,只有 foobar 所以你不必重新输入所有的属性你可以 -ExcludeProperty需要特别注意的一个,然后使用 Calculated 属性 将变量转换为 [double]。现在您可以 Sort 并获得预期的结果。

Bar         NoteProperty System.String Bar=DATABASE_PICTURES/P1040793.JPG
Foo         NoteProperty <b>System.Double</b> Foo=0.980242