我希望文件顶部有最大的值(mailboxSize)。我有一个cvs作为inport。
当我执行以下排序时cmd:
Import-Csv import.csv| Sort-Object MailboxSize,DisplayName -Descending | Export-Csv SORT.csv
我得到以下结果:
"DisplayName","MailboxSize"
"persone6","9941"
"persone3","8484"
"persone1","7008"
"persone4","4322"
"persone5","3106"
"persone7","27536"
"persone10","24253"
"persone8","1961"
"persone9","17076"
"persone11","17012"
"persone2","15351"
"persone12","11795"
"persone14","1156"
"persone13","1008"
但我希望这能作为结果!
"persone7","27536"
"persone10","24253"
"persone9","17076"
"persone11","17012"
"persone2","15351"
"persone12","11795"
"persone6","9941"
"persone3","8484"
"persone1","7008"
"persone4","4322"
"persone5","3106"
"persone14","1156"
"persone13","1008"
答案 0 :(得分:5)
导入CSV文件时,所有属性都为string
- 类型。您必须先将MailboxSize
强制转换为int
,然后才能对其进行正确排序。尝试:
Import-Csv import.csv |
Sort-Object {[int]$_.MailboxSize}, DisplayName -Descending |
Export-Csv SORT.csv
您还应该使用-NoTypeInformation
中的Export-CSV
开关来避开#TYPE .....
行(导出的CSV文件中的第一行)。
样品:
$data = @"
"DisplayName","MailboxSize"
"persone6","9941"
"persone3","8484"
"persone1","7008"
"persone4","4322"
"persone5","3106"
"persone7","27536"
"persone10","24253"
"persone8","1961"
"persone9","17076"
"persone11","17012"
"persone2","15351"
"persone12","11795"
"persone14","1156"
"persone13","1008"
"@ | ConvertFrom-Csv
$data |
Sort-Object {[int]$_.MailboxSize}, DisplayName -Descending |
Export-Csv SORT.csv -NoTypeInformation
SORT.csv
"DisplayName","MailboxSize"
"persone7","27536"
"persone10","24253"
"persone9","17076"
"persone11","17012"
"persone2","15351"
"persone12","11795"
"persone6","9941"
"persone3","8484"
"persone1","7008"
"persone4","4322"
"persone5","3106"
"persone8","1961"
"persone14","1156"
"persone13","1008"
我猜测用户名是假的,但请注意,如果您的用户名实际上是DisplayName
,其中XX是int,则同样的问题适用于personeXX
。像:
persone7 27536
persone20 27536
persone13 27536
要对它们进行排序,您必须为Sort-Object
创建一个脚本块,或者创建自己的函数来分割值并对它们进行正确排序。