按导入CSV的最大数值值排序对象

时间:2015-01-07 19:45:02

标签: powershell powershell-v2.0 exchange-server exchange-server-2010

我希望文件顶部有最大的值(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"

1 个答案:

答案 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创建一个脚本块,或者创建自己的函数来分割值并对它们进行正确排序。