嘿伙计们,我正在尝试用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
显然不是正确的顺序。有人可以解释一下如何解决这个问题吗?谢谢!
答案 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函数将这些视为文本字符串。您需要将这些文本字符串解析为实际整数或其他数字类型,然后排序。