我很想在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,但是给定的代码都没有对我有用或有意义。有人可以给我一个暗示吗?
答案 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
我会假设你有更多只有foo
和bar
的属性,所以你不必重新输入所有属性-ExcludeProperty
需要特别注意的一个,然后使用Calculated属性将变量强制转换为[double]
。现在您可以Sort
获得预期结果。
Bar NoteProperty System.String Bar=DATABASE_PICTURES/P1040793.JPG
Foo NoteProperty System.Double Foo=0.980242