Comando sort de Linux: Ordenación de Texto

LinuxBeginner
Practicar Ahora

Introducción

En esta práctica de laboratorio, explorarás el versátil comando sort en Linux, una potente utilidad para organizar y estructurar datos de texto. Como administrador de una escuela, utilizarás diversas opciones del comando sort para gestionar y analizar la información de los estudiantes de manera eficiente. Esta experiencia práctica te ayudará a comprender cómo manipular datos en escenarios del mundo real utilizando las herramientas de la línea de comandos de Linux.

Este es un Laboratorio Guiado, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y ganar experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel principiante con una tasa de finalización del 98%. Ha recibido una tasa de valoraciones positivas del 100% por parte de los alumnos.

Ordenación básica de nombres de estudiantes

Comencemos ordenando una lista de nombres de estudiantes alfabéticamente. Esta es una tarea común al crear listas de clase u organizar expedientes académicos.

Primero, visualicemos el contenido de nuestra lista de estudiantes:

cat ~/project/students.txt

Deberías ver una lista de nombres de estudiantes sin un orden específico, similar a esta:

David Lee
Alice Johnson
Charlie Brown
Bob Smith
Eve Wilson

Ahora, utilizaremos el comando sort para organizar estos nombres alfabéticamente:

sort ~/project/students.txt

Este comando mostrará la lista ordenada de nombres en tu pantalla. El resultado debería verse así:

Alice Johnson
Bob Smith
Charlie Brown
David Lee
Eve Wilson

El comando sort, de forma predeterminada, ordena las líneas alfabéticamente. Compara las líneas carácter por carácter, empezando desde el principio de cada línea. Es por eso que "Alice" aparece antes que "Bob", y así sucesivamente.

Si no ves ningún resultado, ¡no te preocupes! El comando funcionó, pero simplemente mostró el resultado en la terminal. Si deseas guardar la lista ordenada en un archivo nuevo, puedes usar el operador de redirección de salida > de esta manera: sort ~/project/students.txt > ~/project/sorted_students.txt

Ordenación de estudiantes por edad

A continuación, ordenaremos a los estudiantes por sus edades. Esto puede ser útil para organizar a los alumnos en grupos o actividades adecuadas para su edad.

Primero miremos nuestros datos:

cat ~/project/student_ages.txt

Verás una lista de estudiantes con sus edades, así:

David Lee:21
Alice Johnson:18
Charlie Brown:19
Bob Smith:20
Eve Wilson:18

Para ordenar esta lista por edad, usaremos la opción -n, que le indica a sort que trate los números como valores numéricos en lugar de cadenas de texto:

sort -n -t: -k2 ~/project/student_ages.txt

Desglosemos este comando:

  • -n: Esta opción le indica a sort que realice una ordenación numérica.
  • -t:: Especifica que los campos están separados por dos puntos.
  • -k2: Indica a sort que utilice el segundo campo (la edad) como clave de ordenación.

Esto mostrará la lista de estudiantes ordenados de menor a mayor edad:

Alice Johnson:18
Eve Wilson:18
Charlie Brown:19
Bob Smith:20
David Lee:21

Sin la opción -n, sort trataría las edades como texto, lo que podría llevar a un orden incorrecto (como 18, 19, 20, 21, 3). La opción -n garantiza un orden numérico adecuado.

Ordenación inversa de calificaciones

Ahora, ordenaremos las calificaciones de los estudiantes en orden descendente. Esto se utiliza a menudo para clasificar a los alumnos o identificar a los de mejor rendimiento.

Primero, visualiza la lista actual:

cat ~/project/student_grades.txt

Deberías ver algo como esto:

David Lee:87
Alice Johnson:92
Charlie Brown:95
Bob Smith:88
Eve Wilson:91

Para ordenar las calificaciones de mayor a menor, usaremos la opción -r para el orden inverso, junto con -n para la ordenación numérica:

sort -nr -t: -k2 ~/project/student_grades.txt

Esto es lo que hace cada parte del comando:

  • -n: Realiza una ordenación numérica.
  • -r: Invierte el orden (descendente en lugar de ascendente).
  • -t:: Especifica que los campos están separados por dos puntos.
  • -k2: Utiliza el segundo campo (la calificación) como clave de ordenación.

Este comando mostrará las notas de los estudiantes de mayor a menor:

Charlie Brown:95
Alice Johnson:92
Eve Wilson:91
Bob Smith:88
David Lee:87

La opción -r es especialmente útil cuando quieres ver los valores más altos primero, lo cual es común en muchos escenarios reales como rankings, identificación de líderes o priorización de tareas.

Ordenación de registros por múltiples campos

En este paso, ordenaremos un registro de estudiante más complejo que incluye nombre, edad y calificación. Este es un escenario habitual cuando se trabaja con bases de datos completas de estudiantes.

Primero, veamos nuestros datos:

cat ~/project/student_records.txt

Verás que cada línea contiene el nombre, la edad y la calificación de un estudiante, separados por dos puntos:

David Lee:21:87
Alice Johnson:18:92
Charlie Brown:19:95
Bob Smith:20:88
Eve Wilson:18:91

Para ordenar este archivo por edad (segundo campo) y luego por calificación (tercer campo) en caso de que las edades coincidan, utilizaremos:

sort -t: -k2n -k3nr ~/project/student_records.txt

Significado de cada parte del comando:

  • -t: especifica que los campos están separados por dos puntos.
  • -k2n ordena basándose en el segundo campo (edad) de forma numérica.
  • -k3nr luego ordena basándose en el tercer campo (calificación) de forma numérica y en orden inverso.

Esto mostrará los registros de los estudiantes ordenados principalmente por edad (ascendente) y secundariamente por calificación (descendente) cuando las edades son iguales:

Alice Johnson:18:92
Eve Wilson:18:91
Charlie Brown:19:95
Bob Smith:20:88
David Lee:21:87

Este tipo de ordenación por múltiples claves es sumamente útil cuando necesitas organizar datos bajo varios criterios. En este caso, agrupamos a los estudiantes por edad y, dentro de cada grupo de edad, los clasificamos por sus notas.

Eliminación de entradas duplicadas

A veces, los registros de estudiantes pueden contener duplicados, ya sea por errores en la entrada de datos o por múltiples envíos. Aprendamos cómo eliminar estos duplicados.

Primero, veamos un archivo con posibles duplicados:

cat ~/project/student_clubs.txt

Podrías ver algo como esto:

Alice Johnson:Chess Club
Bob Smith:Debate Team
Charlie Brown:Chess Club
David Lee:Science Club
Eve Wilson:Debate Team
Alice Johnson:Chess Club
Bob Smith:Science Club

Para ordenar esta lista y eliminar los duplicados, usaremos la opción -u:

sort -u ~/project/student_clubs.txt

Este comando mostrará una lista ordenada de membresías únicas a los clubes:

Alice Johnson:Chess Club
Bob Smith:Debate Team
Bob Smith:Science Club
Charlie Brown:Chess Club
David Lee:Science Club
Eve Wilson:Debate Team

La opción -u (unique) le indica a sort que solo muestre la primera ocurrencia de una serie de líneas idénticas. En otras palabras, elimina las líneas duplicadas después de ordenar. Esto es muy útil para crear listas de elementos únicos o para limpiar datos redundantes.

Ten en cuenta que "Bob Smith" aparece dos veces porque pertenece a dos clubes diferentes; estas no se consideran duplicadas ya que la línea completa es distinta.

Resumen

En esta práctica de laboratorio, has aprendido a utilizar el comando sort para organizar diversos tipos de datos de estudiantes. Has explorado varias opciones útiles:

  • Ordenación alfabética básica.
  • Ordenación numérica con -n.
  • Ordenación inversa con -r.
  • Ordenación por múltiples campos con -k.
  • Uso de separadores de campo personalizados con -t.
  • Eliminación de duplicados con -u.

Otras opciones útiles de sort incluyen:

  • -f: Ignorar mayúsculas y minúsculas al ordenar.
  • -b: Ignorar espacios en blanco al principio de la línea.
  • -c: Comprobar si la entrada ya está ordenada.
  • -o: Escribir el resultado en un archivo en lugar de en la salida estándar.

Estas habilidades serán invaluables para gestionar y analizar datos en diversos contextos profesionales, no solo en entornos educativos.