-->

Ordenación con Sort y Extracción de Datos con Cut

Objetivo:

Dominar la ordenación de datos textuales y numéricos mediante el comando sort (incluyendo inversión de orden -r, ordenación numérica -n y salida a fichero -o) y la extracción o segmentación de columnas de información utilizando el comando cut (con delimitadores por omisión, delimitadores personalizados -d, campos -f y rangos de caracteres -c).

Escenario:

  • Herramientas: Terminal de Linux en un entorno Debian o basado en Debian.
  • Conceptos clave: Ordenación alfabética y numérica (sort), inversión de listas (-r), ordenación numérica estricta (-n), redirección interna (-o), extracción por campos (cut -f), especificación de delimitadores (cut -d), extracción por posición de caracteres (cut -c) y composición mediante tuberías (|).

Instrucciones:

Fase 1: Ordenación de texto alfabética y descendente con sort

  • Abre la terminal de Linux en tu directorio de usuario.
  • Visualiza el contenido del fichero de ejemplo nombres generado en prácticas anteriores:
  • cat nombres
  • Ordena alfabéticamente el contenido del fichero usando una tubería:
  • cat nombres | sort
  • Verifica que pasar el archivo directamente como argumento a sort produce el mismo resultado sin necesidad de tubería:
  • sort nombres
  • Invierte el orden de la salida (de Z a A) utilizando el modificador -r:
  • sort -r nombres
  • Ordena el archivo de usuarios del sistema /etc/passwd de forma ascendente y descendente:
  • sort /etc/passwd
    sort -r /etc/passwd
  • Guarda el resultado ordenado en un nuevo archivo llamado nombres_ordenados utilizando el parámetro -o:
  • sort nombres -o nombres_ordenados
  • Comprueba el contenido del fichero recién creado:
  • cat nombres_ordenados

Fase 2: Ordenación numérica estricta con sort -n

  • Obtén el tamaño en megabytes de los ficheros y directorios de tu carpeta personal usando el comando du:
  • du -ma
  • Intenta ordenar la salida anterior canalizándola a un sort estándar y observa el error de ordenación alfanumérica:
  • du -ma | sort
  • Aplica el modificador de ordenación numérica -n para corregir la secuencia desde el menor tamaño hasta el mayor:
  • du -ma | sort -n

Fase 3: Extracción de columnas por tabulación y delimitadores personalizados con cut

  • Usa cut -f1 sobre el resultado de du -a para extraer únicamente el primer campo (tamaño en bloques), el cual está separado por un tabulador:
  • du -a | cut -f1
  • Extrae el segundo campo (nombre del archivo o ruta) cambiando el número de columna a -f2:
  • du -a | cut -f2
  • Examina el fichero /etc/passwd e identifica que sus campos están separados por dos puntos (:) en lugar de tabuladores.
  • Intenta extraer el campo 6 sin definir delimitador y comprueba que devuelve la línea completa sin cortar:
  • cat /etc/passwd | cut -f6
  • Especifica los dos puntos como delimitador usando -d ":" y extrae el directorio personal (campo 6) de cada usuario:
  • cat /etc/passwd | cut -d ":" -f6
  • Muestra en una sola salida el nombre de usuario (campo 1) y su directorio home (campo 6) separando los campos con coma:
  • cat /etc/passwd | cut -d ":" -f1,6

Fase 4: Extracción de datos por delimitador de espacio y por posiciones de caracteres (cut -c)

  • Lista el contenido del directorio con ls -l y extrae el propietario (campo 3) delimitando por espacios en blanco:
  • ls -l | cut -d " " -f3
  • Intenta extraer la columna de tamaños con -f5 y observa cómo la variación en el número de espacios vacíos descuadra las columnas.
  • Soluciona la imprecisión de los múltiples espacios extrayendo exactamente el rango de posiciones o caracteres (por ejemplo, de la columna 30 a la 39) mediante cut -c:
  • ls -l | cut -c 30-39
  • Limpia la pantalla de la terminal:
  • clear

Preguntas de reflexión:

  1. ¿Qué criterio de ordenación aplica por defecto el comando sort sobre el texto recibido?
  2. ¿Qué función cumple la opción -r en el comando sort?
  3. ¿Cuál es la diferencia entre guardar el resultado ordenado mediante sort archivo > nuevo_archivo y usar sort archivo -o nuevo_archivo?
  4. ¿Por qué al ordenar números con un sort estándar (sin opciones) el valor "100" aparece antes que el valor "20"?
  5. ¿Qué parámetro del comando sort debemos utilizar cuando deseamos ordenar datos basándonos en su valor numérico real?
  6. ¿Cuál es el separador o delimitador por defecto que utiliza el comando cut para dividir las columnas de una línea?
  7. ¿Para qué sirve el modificador -d en el comando cut y cómo se debe especificar cuando el delimitador es un símbolo especial como los dos puntos (:)?
  8. Si queremos extraer simultáneamente el primer campo y el quinto campo de un fichero delimitado por comas, ¿qué sintaxis debemos usar con cut?
  9. ¿Por qué el filtrado de campos con cut -d " " -f5 suele fallar o dar resultados inconsistentes al aplicarse sobre la salida de ls -l?
  10. ¿En qué casos es preferible utilizar la opción de corte por caracteres (cut -c) en lugar del corte por campos (cut -f)?
Haz clic aquí para ver las soluciones y explicaciones

1. ¿Qué criterio de ordenación aplica por defecto el comando sort sobre el texto recibido?

Aplica una ordenación alfanumérica ascendente basada en el código ASCII/Unicode de los caracteres, procesando las líneas de izquierda a derecha de la A a la Z.


2. ¿Qué función cumple la opción -r en el comando sort?

Invierte el orden de la salida (Reverse), haciendo que los datos se muestren de forma descendente (de Z a A o del número mayor al menor).


3. ¿Cuál es la diferencia entre guardar el resultado ordenado mediante sort archivo > nuevo_archivo y usar sort archivo -o nuevo_archivo?

Ambas formas guardan el resultado en un archivo nuevo. Sin embargo, la opción -o (output) es más segura y permite sobreescribir el propio archivo original sin riesgo de vaciarlo antes de leerlo, algo que ocurriría si se intentara hacer sort archivo > archivo con la redirección estándar.


4. ¿Por qué al ordenar números con un sort estándar (sin opciones) el valor "100" aparece antes que el valor "20"?

Porque el sort estándar compara carácter por carácter de forma alfabética. Dado que el primer carácter de "100" es "1" y el de "20" es "2", el sistema considera que "100" va primero independientemente de la cifra completa.


5. ¿Qué parámetro del comando sort debemos utilizar cuando deseamos ordenar datos basándonos en su valor numérico real?

Se debe utilizar el parámetro -n (numeric sort), que evalúa el valor numérico global de la cadena en lugar de tratar cada número como una secuencia de caracteres individuales.


6. ¿Cuál es el separador o delimitador por defecto que utiliza el comando cut para dividir las columnas de una línea?

El carácter delimitador por defecto es el tabulador (\t).


7. ¿Para qué sirve el modificador -d en el comando cut y cómo se debe especificar cuando el delimitador es un símbolo especial como los dos puntos (:)?

Permite definir un carácter separador personalizado. Se especifica escribiendo la opción -d seguida del carácter delimitador encerrado entre comillas (por ejemplo, -d ":").


8. Si queremos extraer simultáneamente el primer campo y el quinto campo de un fichero delimitado por comas, ¿qué sintaxis debemos usar con cut?

Se debe indicar cut -d "," -f1,5 nombre_fichero.


9. ¿Por qué el filtrado de campos con cut -d " " -f5 suele fallar o dar resultados inconsistentes al aplicarse sobre la salida de ls -l?

Porque la salida de ls -l utiliza alineación visual mediante múltiples espacios consecutivos en blanco. El comando cut interpreta cada espacio individual como un límite de campo, provocando que los campos vacíos desplacen la numeración de las columnas reales.


10. ¿En qué casos es preferible utilizar la opción de corte por caracteres (cut -c) en lugar del corte por campos (cut -f)?

Es preferible cuando las salidas tienen un formato de ancho fijo bien definido pero carecen de un delimitador uniforme constante (como ocurre en ls -l o reportes formateados en columnas estáticas).


Ficha de Laboratorio: Ordenación con Sort y Extracción de Datos con Cut

Instrucciones de entrega:

  1. Rellena los campos y responde en este formulario desde tu navegador.
  2. Pulsa el botón de imprimir al final de la página.
  3. Selecciona "Guardar como PDF" en el diálogo de impresión.
  4. Entrega el archivo PDF en el aula virtual.

Alumno/a:      Fecha:      

Grupo:


Completa la ficha realizando las siguientes actividades:

  1. Comprueba el comportamiento de sort estándar frente a la ordenación inversa -r.
    Escribe los comandos para ordenar el archivo nombres de forma ascendente y de forma descendente:

    Copia la salida obtenida en la ordenación inversa:

    Explica la función del parámetro -r:
  2. Aplica la ordenación numérica estricta con sort -n sobre tamaños de archivos.
    Escribe la orden para listar tamaños con du -ma ordenados numéricamente de menor a mayor:

    Copia las primeras 3 y las últimas 3 líneas del resultado devuelto por la consola:

    Explica qué sucede si omitimos el modificador -n al ordenar cantidades numéricas:
  3. Extrae campos delimitados por tabulador con cut -f.
    Escribe la orden para obtener únicamente la columna de nombres/rutas (campo 2) de la salida de du -a:

    Copia una muestra de los datos extraídos:

    Explica cuál es el delimitador por defecto que asume cut cuando no se usa la opción -d:
  4. Utiliza delimitadores personalizados para consultar /etc/passwd.
    Escribe el comando para extraer simultáneamente el usuario (campo 1) y su directorio home (campo 6) indicando el delimitador ::

    Copia 3 líneas de la salida devuelta por la terminal:

    Explica el papel del parámetro -d ":" en esta consulta:
  5. Resuelve la imprecisión de los espacios en blanco mediante el corte por caracteres (cut -c).
    Escribe la orden para seleccionar un rango fijo de caracteres (por ejemplo 30-39) de la salida de ls -l:

    Copia la salida filtrada por caracteres:

    Explica por qué cut -c resuelve los problemas que genera el filtrado por espacios en ls -l: