Изучение PowerShell Sort-Object с примерами

Сортировка данных не должна быть тяжелой задачей. Если вы ищете эффективный способ сортировки данных, команда PowerShell `Sort-Object` здесь, чтобы помочь!

В этом руководстве вы узнаете, как использовать команду PowerShell `Sort-Object` для сортировки данных, будь то числа, строки или объекты.

Забудьте о постоянном вглядывании в ваши данные и эффективно сортируйте их в PowerShell!

Необходимые условия

Убедитесь, что у вас установлен компьютер с PowerShell 5.0 или более поздней версией для следования этому руководству с практическими демонстрациями. В этом руководстве используется Windows 10 с установленным PowerShell 7.

Сортировка данных с помощью команды PowerShell `Sort-Object`

В зависимости от ваших требований вы можете сортировать данные по одному или нескольким свойствам разными способами. Команда `Sort-Object` позволяет вам сортировать данные, например, по возрастанию или убыванию для упрощения анализа и работы с структурированной информацией.

Базовый синтаксис команды `Sort-Object` следующий, где:

  • <Объект-для-сортировки> – Относится к сбору данных для сортировки, таким как массив, список или другие типы данных.
  • <-Параметр> – Необязательный параметр для указания критериев сортировки, который позволяет настраивать, как выполняется сортировка.
<Object-to-Sort>|Sort-Object <-Parameter>

Чтобы увидеть, как вы можете сортировать данные по возрастанию и убыванию:

1. Откройте PowerShell и выполните следующую команду, которая не выводит результат, а определяет список случайных целых чисел в переменной $numbers.

$numbers = 4, 2, 3, 1, 5

? Обратите внимание, что в PowerShell вы работаете не только с числами и строками, но и с объектами, поскольку PowerShell является объектно-ориентированным языком и оболочкой.

2. Затем выполните следующие команды для сортировки (Sort-Objects) и отображения (Write-Output) чисел, определенных в переменной $numbers.

$sortedNumbers = $numbers | Sort-Object
Write-Output $sortedNumbers

Без добавления параметров вывод отображает числа в возрастающем порядке.

Sorting data in ascending order

3. Теперь выполните те же команды, но на этот раз добавьте параметр -Descending, чтобы сортировать и отображать числа в убывающем порядке.

$sortedNumbers = $numbers | Sort-Object -Descending
Write-Output $sortedNumbers

Подобный ниже вывод указывает, что числа были отсортированы в убывающем порядке.

Sorting numbers in descending order

Сортировка данных по уникальным значениям

Сортировка данных по возрастанию и убыванию – это одно. Но могут быть случаи, когда вам нужно отсортировать данные на основе уникальных значений. В этом контексте “уникальные” означает отличные или неповторяющиеся значения внутри набора данных.

Чтобы отсортировать данные по уникальным значениям:

Выполните следующие команды, чтобы выполнить следующее:

  • Определите список целых чисел (с включенными дубликатами) в переменной $numbers.
  • Отсортируйте числа по уникальным значениям в порядке -убыванию и сохраните результат в переменной $sortedNumbers.

При сортировке по уникальным значениям вы упорядочиваете данные так, чтобы каждое значение появлялось только один раз в отсортированном результате, устраняя дубликаты.

Эти команды не предоставляют вывод, но вы проверите отсортированные данные на следующем шаге.

$numbers = 4, 2, 3, 3, 1, 5, 2
$sortedNumbers = $numbers | Sort-Object -Unique -Descending

Теперь выполните команду Write-Output ниже, чтобы вывести содержимое переменной $sortedNumbers и проверить результат.

Write-Output $sortedNumbers

Ниже отсортированы все уникальные значения в порядке убывания, и дубликаты были устранены.

Как видите, сортировка по уникальным значениям повышает эффективность анализа данных и устраняет избыточную информацию при работе с большими наборами данных.

Sorting data by unique values

Сортировка данных по строкам

До сих пор вы видели, как сортировать числовые значения. Но что, если вы работаете со строками? Не беспокойтесь. Команда Sort-Object позволяет вам упорядочивать строковые данные в определенном порядке на основе критериев сортировки.

В этом контексте строка относится к одному символу или последовательности символов, таким как слова, фразы или другие текстовые данные. В PowerShell строки представлены путем заключения текста в кавычки, либо одинарные ('), либо двойные (").

Выполните следующие команды, чтобы отсортировать массив строк в порядке возрастания (алфавитном) по умолчанию.

Сортировка строк в PowerShell обеспечивает гибкость в организации текстовых данных в желаемом порядке, позволяя эффективную манипуляцию и анализ данных.

# Определение массива строк
$strings = "a", "b", "c" 
# Сортировка строк в порядке возрастания по умолчанию (без параметров)
$sortedStrings = $strings | Sort-Object
# Отображение отсортированных строк
Write-Output $sortedStrings
Sorting strings in alphabetical order

Теперь выполните те же команды, но вместо этого отсортируйте их в обратном порядке -Descending.

# Определение массива строк
$strings = "a", "b", "c" 
# Сортировка строк в порядке убывания
$sortedStrings = $strings | Sort-Object -Descending
# Отображение отсортированных строк
Write-Output $sortedStrings

На этот раз вы увидите вывод в обратном порядке, как показано ниже.

Sorting strings in the reverse order

Сортировка данных по свойствам

Безусловно, сортировка строк пригодится. Но обычно вам следует быть более конкретными при сортировке данных. Помимо сортировки строк, почему бы не отсортировать объекты на основе их свойств?

При работе с объектами PowerShell каждый объект обычно имеет одно или несколько свойств, которые можно использовать для сортировки. Эти свойства позволяют вам определить критерии сортировки, соответствующие вашим потребностям.

Выполните следующие команды, чтобы получить список всех выполняющихся процессов (Get-Process) в вашей системе и отсортировать их по использованию процессора (CPU). Параметр -Descending отображает результат с наиболее ресурсоемкими процессами в начале списка.

# Получить коллекцию всех выполняющихся процессов
$processes = Get-Process

# Отсортировать процессы на основе использования CPU в порядке убывания
$sortedProcesses = $processes | Sort-Object -Property CPU -Descending

# Выбрать и отобразить свойства Name и CPU для каждого процесса
$sortedProcesses | Select-Object Name, CPU
Sorting data by properties

Сортировка хэш-таблиц

Сортировка объектов по свойствам – это изменение игры при работе с анализом данных. Но как насчет организации данных в пары ключ-значение, как в хэш-таблицах?

Командлет Sort-Object позволяет сортировать хэш-таблицы для улучшения представления данных и упрощения извлечения информации.

Запустите следующий код, чтобы преобразовать хэш-таблицу в массив пар ключ-значение и отсортировать хэш-таблицу по её ключам.

# Создайте хэш-таблицу с тремя парами ключ-значение
$hashTable = @{
    "C" = "Charlie"
    "A" = "Alpha"
    "B" = "Bravo"
}

# Отсортируйте хэш-таблицу по ключам и сохраните отсортированный результат в $sortedHashTable
$sortedHashTable = $hashTable.GetEnumerator() | Sort-Object -Property Name

# Переберите каждую запись в отсортированной хэш-таблице
foreach ($entry in $sortedHashTable) {
    # Выведите пару ключ-значение
    Write-Output "$($entry.Name): $($entry.Value)"
}

Поскольку ключи сортируют хэш-таблицу, вывод будет иметь следующий вид, где можно наблюдать, что вывод организует и отображает пары ключ-значение в определенном порядке.

Этот метод сортировки обеспечивает более удобное представление данных и упрощает извлечение информации из хэш-таблицы.

Sorting hash tables

Заключение

На протяжении этого руководства вы исследовали, как сортировать уникальные значения, строки, числа, процессы и даже хэш-таблицы с помощью командлета Sort-Object в PowerShell. Сортировка данных – это одна из задач, которая позволяет вам подготовить почву для более глубокого анализа данных, и с командлетом Sort-Object в PowerShell вы идете в правильном направлении.

Вооружившись этим новым знанием, вы теперь можете обеспечить организованное и осмысленное представление ваших данных и уверенно демонстрировать их другим.

Сортировка – это только одна из многих ценных возможностей PowerShell и его командлетов. Почему бы не расширить свои навыки, изучив другие командлеты? Возможно, создать журналы программ с помощью Tee-Object или измерить размеры объектов с помощью Measure-Object?

Source:
https://adamtheautomator.com/powershell-sort-object/