2015-02-07 73 views
0

一位不愿透露姓名整数列我理了理排序在PowerShell中CSV,看起来像这样:排序在PowerShell中

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 

,但它只是没有做任何事情。我也研究了互联网的一半,但没有任何给定的代码工作或对我有意义。有人能给我一个提示吗?

+1

排序{[双] $ _。FOO} -Descending – PetSerAl 2015-02-07 00:20:08

+0

好了,所以它现在排序它(我是一个白痴... INT),但犯规后写回文件。 – 2015-02-07 00:26:59

+0

好吧,我找到了一个解决方法,永不止息:) – 2015-02-07 00:32:14

回答

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需要特别关注,然后使用计算的一个属性将该变量投射为[double]。现在你可以Sort并获得预期的结果。

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