Aprendiendo PowerShell Sort-Object con Ejemplos

Ordenar datos no debería ser una tarea abrumadora. Si estás buscando una manera eficiente de ordenar datos, el cmdlet Sort-Object de PowerShell está aquí para ayudarte!

En este tutorial, aprenderás cómo utilizar el cmdlet Sort-Object de PowerShell para ordenar datos, ya sean números, cadenas u objetos.

¡Deja de mirar constantemente tus datos y ordénalos eficientemente en PowerShell!

Requisitos previos

Asegúrate de tener una máquina con PowerShell 5.0 o posterior instalado para seguir este tutorial junto con las demostraciones prácticas. Este tutorial utiliza Windows 10 con PowerShell 7 instalado.

Ordenar Datos con el cmdlet Sort-Object de PowerShell

Dependiendo de tus requisitos, puedes ordenar datos basados en una o más propiedades de muchas maneras. El cmdlet Sort-Object te permite ordenar datos, por ejemplo, en orden ascendente o descendente para facilitar el análisis y trabajar con información estructurada.

La sintaxis básica del cmdlet Sort-Object es la siguiente donde:

  • <Objeto-a-Ordenar> – Se refiere a la recolección de datos para ordenar, como un array, una lista u otros tipos de datos.
  • <-Parámetro> – Un parámetro opcional para especificar los criterios de ordenación que te permite personalizar cómo se realiza la ordenación.
<Object-to-Sort>|Sort-Object <-Parameter>

Para ver cómo puedes ordenar datos en orden ascendente y descendente:

1. Abre PowerShell y ejecuta el siguiente comando, el cual no proporciona una salida pero define una lista de números enteros aleatorios en la variable $numbers.

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

? Ten en cuenta que en PowerShell no solo estás trabajando con números y cadenas, sino con objetos, ya que PowerShell es un lenguaje y shell orientado a objetos.

2. A continuación, ejecuta los siguientes comandos para ordenar (Sort-Objects) y mostrar (Write-Output) los números definidos en la variable $numbers.

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

Sin agregar parámetros, la salida mostrará los números en orden ascendente.

Sorting data in ascending order

3. Ahora, ejecuta los mismos comandos, pero esta vez, agrega el parámetro -Descending para ordenar y mostrar los números en orden descendente.

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

La salida, similar a la siguiente, indica que los números han sido ordenados en orden descendente.

Sorting numbers in descending order

Ordenar Datos por Valores Únicos

Ordenar datos en orden ascendente y descendente es una cosa. Pero puede haber instancias en las que necesites ordenar datos basados en valores únicos. En este contexto, “único” se refiere a valores distintos o no repetidos dentro de un conjunto de datos.

Para ordenar datos por valores únicos:

Ejecuta los siguientes comandos para realizar lo siguiente:

  • Define una lista de números enteros (con duplicados incluidos) en la variable $numbers.
  • Ordena los números por valores -Únicos en orden -Descendente y guarda el resultado en la variable $sortedNumbers.

Cuando ordenas por valores únicos, organizas los datos de manera que cada valor aparezca solo una vez en el resultado ordenado, eliminando duplicados.

Estos comandos no proporcionan una salida, pero verificarás los datos ordenados en el siguiente paso.

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

Ahora, ejecuta el comando Write-Output a continuación para mostrar el contenido de la variable $sortedNumbers y verificar el resultado.

Write-Output $sortedNumbers

A continuación, todos los valores únicos están ordenados en orden descendente, y se han eliminado los valores duplicados.

Como puedes ver, ordenar por valores únicos mejora la eficiencia del análisis de datos y elimina la información redundante al tratar con conjuntos de datos grandes.

Sorting data by unique values

Ordenar Datos por Cadenas

Hasta ahora, has visto cómo ordenar valores numéricos. Pero ¿qué pasa si estás trabajando con cadenas? No te preocupes. El cmdlet Sort-Object te permite organizar datos de cadena en un orden específico basado en criterios de ordenación.

En este contexto, una cadena se refiere a un solo carácter o a una secuencia de caracteres, como palabras, frases u otros datos textuales. En PowerShell, las cadenas se representan al encerrar el texto entre comillas, ya sea simples (') o dobles (").

Ejecute los siguientes comandos para ordenar un conjunto de cadenas en orden ascendente (alfabético) de forma predeterminada.

Ordenar cadenas en PowerShell proporciona flexibilidad para organizar datos textuales en el orden deseado, permitiendo una manipulación y análisis eficientes de los datos.

# Definir un conjunto de cadenas
$strings = "a", "b", "c" 
# Ordenar las cadenas en orden ascendente de forma predeterminada (sin parámetros)
$sortedStrings = $strings | Sort-Object
# Mostrar las cadenas ordenadas
Write-Output $sortedStrings
Sorting strings in alphabetical order

Ahora, ejecute los mismos comandos, pero ordénelos en orden -Descending en su lugar.

# Definir un conjunto de cadenas
$strings = "a", "b", "c" 
# Ordenar las cadenas en orden descendente
$sortedStrings = $strings | Sort-Object -Descending
# Mostrar las cadenas ordenadas
Write-Output $sortedStrings

Esta vez verá la salida en orden inverso, como se muestra a continuación.

Sorting strings in the reverse order

Ordenar Datos por Propiedades

Sin duda, ordenar cadenas es útil. Pero, por lo general, debería ser más específico al ordenar datos. Además de ordenar cadenas, ¿por qué no ordenar objetos según sus propiedades?

Cuando trabajas con objetos en PowerShell, cada objeto generalmente tiene una o más propiedades que puedes usar para ordenar. Estas propiedades te permiten definir tus criterios de ordenación adaptados a tus necesidades.

Ejecuta los siguientes comandos para obtener una lista de todos los procesos en ejecución (Get-Process) en tu sistema y ordenarlos por utilización de CPU. El parámetro -Descending muestra el resultado con los procesos más intensivos en recursos listados primero.

# Obtén una colección de todos los procesos en ejecución
$processes = Get-Process

# Ordena los procesos según el uso de la CPU en orden descendente
$sortedProcesses = $processes | Sort-Object -Property CPU -Descending

# Selecciona y muestra las propiedades Nombre y CPU de cada proceso
$sortedProcesses | Select-Object Name, CPU
Sorting data by properties

Ordenar Tablas de Hash

Ordenar objetos por propiedades es fundamental al trabajar con análisis de datos. Pero, ¿qué pasa con organizar datos en pares clave-valor como las tablas de hash?

El cmdlet Sort-Object te permite ordenar tablas de hash para mejorar la presentación de datos y simplificar la recuperación de información.

Ejecuta el siguiente código para convertir una tabla hash en un arreglo de pares clave-valor y ordenar la tabla hash por sus claves.

# Crea una tabla hash con tres pares clave-valor
$hashTable = @{
    "C" = "Charlie"
    "A" = "Alpha"
    "B" = "Bravo"
}

# Ordena la tabla hash por claves y almacena el resultado ordenado en $sortedHashTable
$sortedHashTable = $hashTable.GetEnumerator() | Sort-Object -Property Name

# Itera a través de cada entrada en la tabla hash ordenada
foreach ($entry in $sortedHashTable) {
    # Muestra el par clave-valor
    Write-Output "$($entry.Name): $($entry.Value)"
}

Dado que las claves ordenan la tabla hash, la salida se parecerá a la siguiente, donde puedes observar que la salida organiza y muestra los pares clave-valor en un orden específico.

Este método de ordenamiento garantiza una mejor presentación de los datos y facilita la recuperación de información de la tabla hash.

Sorting hash tables

Conclusión

A lo largo de este tutorial, has explorado cómo ordenar valores únicos, cadenas, números, procesos e incluso tablas hash con el cmdlet Sort-Object. La clasificación de datos es una tarea que te permite allanar el camino hacia un análisis de datos más perspicaz, y con el cmdlet Sort-Object de PowerShell, estás en el camino correcto.

Armado con este nuevo conocimiento, ahora puedes asegurarte de que tus datos estén organizados de manera significativa y mostrarlos con confianza a los demás.

La clasificación es solo una de las muchas capacidades valiosas de PowerShell y sus cmdlets. ¿Por qué no ampliar tus habilidades aprendiendo sobre otros cmdlets? Quizás crear registros de programa con \href{https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/tee-object?view=powershell-7.3}{Tee-Object} o medir tamaños de objetos con \href{https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/measure-object?view=powershell-7.3}{Measure-Object}?

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