19

CSV ファイルで数字を含む列を並べ替えようとしています。しかし、どういうわけかうまくいきません。サンプル 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

明らかに正しい順序ではありません。誰かがこの問題を解決する方法を説明してもらえますか?

4

1 に答える 1

45

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 }

于 2013-02-23T12:31:15.193 に答える