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

时间:2015-02-07 00:13:14

标签: sorting 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,但是给定的代码都没有对我有用或有意义。有人可以给我一个暗示吗?

1 个答案:

答案 0 :(得分:1)

只是为了得到这里的答案,因为没有人达到这一点。

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

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 System.Double Foo=0.980242