排序对象和整数

时间:2013-02-23 12:19:54

标签: sorting powershell

嘿伙计们,我正在尝试用CSV文件中的数字对colomn进行排序。但不知怎的,它不起作用。样本CSV:

Orange;65
Red;160
Green;140
White;110
Purple;85

这是我尝试过的一段代码:

$csv = Import-Csv -Header "Color", "Number" -delimiter ';' data.csv
$csv | Sort-Object Number

这给了我以下输出:

Color                Number
-----                ------
White                110
Green                140
Red                  160
Orange               65
Purple               85

显然不是正确的顺序。有人可以解释一下如何解决这个问题吗?谢谢!

2 个答案:

答案 0 :(得分:33)

默认情况下,

Import-CSV会将csv列导入为strings。在按值排序之前,需要将其强制转换为int,而不是“按字母顺序排序”。例如:

$csv = Import-Csv -Header "Color", "Number" -delimiter ';' data.csv
$csv | % { $_.Number = [int]$_.Number }
$csv | Sort-Object Number

Color  Number
-----  ------
Orange     65
Purple     85
White     110
Green     140
Red       160

作为替代方案,您可以在排序时进行转换,如下所示:

$csv = Import-Csv -Header "Color", "Number" -delimiter ';' data.csv
$csv | Sort-Object @{e={$_.Number -as [int]}}

甚至更短$csv | Sort-Object { [int]$_.Number }

答案 1 :(得分:0)

看起来sort函数将这些视为文本字符串。您需要将这些文本字符串解析为实际整数或其他数字类型,然后排序。