2013-02-23 14 views
10

Hey ragazzi Sto cercando di ordinare una colonna con i numeri in un file CSV. Ma in qualche modo non funziona. CSV di esempio:Sort-Object and Integers

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

Questo è il pezzo di codice ho provato con:

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

che mi dà il seguente risultato:

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

Ovviamente non nell'ordine corretto. Qualcuno può spiegarmi come risolvere questo problema? Grazie!

risposta

29

Import-CSV importazioni colonne csv come strings per impostazione predefinita. Devi lanciarlo su int prima di poter ordinare per valore, e non "alfabetico". Es:

$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 

In alternativa, è possibile lanci, mentre l'ordinamento, in questo modo:

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

o anche più breve $csv | Sort-Object { [int]$_.Number }

+0

Cheers mate è riuscito a risolverlo :) – ScriptingBerry

+0

Potresti spiegarmi, però, dalla tua alternativa, che cosa significa @ {e =? Soprattutto la 'e'. Scusa se ti disturbo, sto ancora imparando :) espressione – ScriptingBerry

+1

. è qualcosa che usi per specificare le proprietà in PowerShell. Esempio per creare campi personalizzati in 'select-object':' select-object @ {nome = "nome visualizzato"; espressione = {codice per produrre valore usando ex $ _. Proprietà ecc.}} '. 'Sort-Object' non ha bisogno di un columnname da ordinare, quindi ho usato solo expression. –

0

Sembra che la funzione di ordinamento li veda come stringhe di testo. È necessario analizzare tali stringhe di testo in interi effettivi o altri tipi numerici, quindi ordinare.

+0

potrebbe essere un'idea, in futuro, per fornire il come, e non solo il perché – user66001