Как отсортировать столбец CSV в powershell?

#powershell #csv

#powershell #csv

Вопрос:

Я пытаюсь взять определенный столбец CSV и отсортировать его в порядке возрастания, но по какой-то причине все значения, которые я получаю, перепутаны. Например, если столбец 1 моего csv-файла равен 3,5,1,6,3, я хочу, чтобы он выводился в порядке возрастания 1,3,3,5,6.

Это то, что я пытаюсь: (Я также пробовал без -property)

 $csvFile = Import-CSV <mypath>
$sortColumn = $csvFile.column1 | Sort-Object -Property {$_ -as [decimal]}
  

Есть ли какой-нибудь быстрый способ сделать это? Возможно, есть способ превратить этот столбец в массив, а затем отсортировать его?

Ответ №1:

Хотя ваш подход должен работать, предполагая, что вы ссылаетесь на правильный столбец, он не будет быстрым.

Для более быстрой альтернативы рассмотрите это:

 # Simulate import of a CSV file.
$csvFile = @'
Num
3
5
1
6
3
'@ | ConvertFrom-Csv

# Convert the column values to an array of [decimal]s by way of a cast.
$nums = [decimal[]] $csvFile.Num

# Sort the array in place.
[Array]::Sort($nums)

# The above is the conceptual equivalent of the following, which is much slower:
# $nums = $csvFile.Num | Sort-Object { $_ -as [decimal] }
  

Вывод отсортированного массива $nums приводит к:

 1
3
3
5
6
  

Ответ №2:

Попробуйте

 $_.yourcolumnname 
  

вместо

 $_
  

Комментарии:

1. Обратите внимание, что входные данные в вопросе $csvFile.column1 — это значения определенного столбца. Таким образом, код в вопросе должен работать как есть, предполагая, что .column1 значения могут быть преобразованы в [decimal] — хотя это не будет работать хорошо.