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
nombresgenerado en prácticas anteriores: - Ordena alfabéticamente el contenido del fichero usando una tubería:
- Verifica que pasar el archivo directamente como argumento a
sortproduce el mismo resultado sin necesidad de tubería: - Invierte el orden de la salida (de Z a A) utilizando el modificador
-r: - Ordena el archivo de usuarios del sistema
/etc/passwdde forma ascendente y descendente: - Guarda el resultado ordenado en un nuevo archivo llamado
nombres_ordenadosutilizando el parámetro-o: - Comprueba el contenido del fichero recién creado:
cat nombres
cat nombres | sort
sort nombres
sort -r nombres
sort /etc/passwd
sort -r /etc/passwd
sort nombres -o nombres_ordenados
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: - Intenta ordenar la salida anterior canalizándola a un
sortestándar y observa el error de ordenación alfanumérica: - Aplica el modificador de ordenación numérica
-npara corregir la secuencia desde el menor tamaño hasta el mayor:
du -ma
du -ma | sort
du -ma | sort -n
Fase 3: Extracción de columnas por tabulación y delimitadores personalizados con cut
- Usa
cut -f1sobre el resultado dedu -apara extraer únicamente el primer campo (tamaño en bloques), el cual está separado por un tabulador: - Extrae el segundo campo (nombre del archivo o ruta) cambiando el número de columna a
-f2: - Examina el fichero
/etc/passwde 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:
- Especifica los dos puntos como delimitador usando
-d ":"y extrae el directorio personal (campo 6) de cada usuario: - Muestra en una sola salida el nombre de usuario (campo 1) y su directorio home (campo 6) separando los campos con coma:
du -a | cut -f1
du -a | cut -f2
cat /etc/passwd | cut -f6
cat /etc/passwd | cut -d ":" -f6
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 -ly extrae el propietario (campo 3) delimitando por espacios en blanco: - Intenta extraer la columna de tamaños con
-f5y 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: - Limpia la pantalla de la terminal:
ls -l | cut -d " " -f3
ls -l | cut -c 30-39
clear
Preguntas de reflexión:
- ¿Qué criterio de ordenación aplica por defecto el comando
sortsobre el texto recibido? - ¿Qué función cumple la opción
-ren el comandosort? - ¿Cuál es la diferencia entre guardar el resultado ordenado mediante
sort archivo > nuevo_archivoy usarsort archivo -o nuevo_archivo? - ¿Por qué al ordenar números con un
sortestándar (sin opciones) el valor "100" aparece antes que el valor "20"? - ¿Qué parámetro del comando
sortdebemos utilizar cuando deseamos ordenar datos basándonos en su valor numérico real? - ¿Cuál es el separador o delimitador por defecto que utiliza el comando
cutpara dividir las columnas de una línea? - ¿Para qué sirve el modificador
-den el comandocuty cómo se debe especificar cuando el delimitador es un símbolo especial como los dos puntos (:)? - Si queremos extraer simultáneamente el primer campo y el quinto campo de un fichero delimitado por comas, ¿qué sintaxis debemos usar con
cut? - ¿Por qué el filtrado de campos con
cut -d " " -f5suele fallar o dar resultados inconsistentes al aplicarse sobre la salida dels -l? - ¿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:
- Rellena los campos y responde en este formulario desde tu navegador.
- Pulsa el botón de imprimir al final de la página.
- Selecciona "Guardar como PDF" en el diálogo de impresión.
- Entrega el archivo PDF en el aula virtual.
Alumno/a: Fecha:
Grupo:
Completa la ficha realizando las siguientes actividades:
- Comprueba el comportamiento de
sortestándar frente a la ordenación inversa-r.
Escribe los comandos para ordenar el archivonombresde forma ascendente y de forma descendente:
Copia la salida obtenida en la ordenación inversa:
Explica la función del parámetro-r:
- Aplica la ordenación numérica estricta con
sort -nsobre tamaños de archivos.
Escribe la orden para listar tamaños condu -maordenados 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-nal ordenar cantidades numéricas:
- Extrae campos delimitados por tabulador con
cut -f.
Escribe la orden para obtener únicamente la columna de nombres/rutas (campo 2) de la salida dedu -a:
Copia una muestra de los datos extraídos:
Explica cuál es el delimitador por defecto que asumecutcuando no se usa la opción-d:
- 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:
- 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 ejemplo30-39) de la salida dels -l:
Copia la salida filtrada por caracteres:
Explica por quécut -cresuelve los problemas que genera el filtrado por espacios enls -l: