#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]
— хотя это не будет работать хорошо.