Archivos de Ejemplo
Dos archivos de ejemplo que usaremos en todos los ejercicios. Usuario atu, Ubuntu 24.04, ruta base
/home/atu/.
datos_ventas.csv
| Nombre | Producto | Cantidad | Precio | Ciudad |
|---|---|---|---|---|
| Ana | Laptop | 2 | 1200 | Madrid |
| Pedro | Mouse | 5 | 25 | Barcelona |
| Maria | Teclado | 1 | 70 | Madrid |
| Jose | Laptop | 1 | 1200 | Sevilla |
| Ana | Monitor | 3 | 300 | Barcelona |
| Maria | Mouse | 2 | 25 | Sevilla |
| Pedro | Laptop | 3 | 1200 | Madrid |
lista_productos.txt
Laptop
Mouse
Teclado
Monitor
Laptop ← duplicado
Mouse ← duplicado
Teclado ← duplicado
Laptop ← duplicado
bash — crear archivos de ejemplo
# Crear datos_ventas.csv
cat << EOF > /home/atu/datos_ventas.csv
Nombre,Producto,Cantidad,Precio,Ciudad
Ana,Laptop,2,1200,Madrid
Pedro,Mouse,5,25,Barcelona
Maria,Teclado,1,70,Madrid
Jose,Laptop,1,1200,Sevilla
Ana,Monitor,3,300,Barcelona
Maria,Mouse,2,25,Sevilla
Pedro,Laptop,3,1200,Madrid
EOF
# Crear lista_productos.txt
cat << EOF > /home/atu/lista_productos.txt
Laptop
Mouse
Teclado
Monitor
Laptop
Mouse
Teclado
Laptop
EOF
Resumen de los 5 Comandos
Comandos 6–10 de la serie — orientados al procesamiento y análisis de datos de texto.
cut
Extraer columnas o caracteres de cada línea.
sort
Ordenar líneas alfa o numéricamente.
uniq
Filtrar líneas duplicadas consecutivas.
wc
Contar líneas, palabras y bytes.
tee
Mostrar y guardar la salida simultáneamente.
6. cut — Extraer Columnas
Extrae secciones o columnas de cada línea de un archivo. Fundamental para trabajar con archivos CSV y datos delimitados.
Sintaxis: cut [opciones] [archivo]
| Opción | Descripción |
|---|---|
| -d 'DELIM' | Especifica el carácter delimitador de campos (ej: , para CSV, : para /etc/passwd). |
| -f LISTA | Especifica los campos (columnas) a extraer: un número (2), rango (1-3), lista (1,5), o desde campo N en adelante (3-). |
| -c POS | Extrae caracteres específicos por posición en cada línea (ej: 1-10 = primeros 10 chars). |
Ejemplos prácticos
6.1 Extraer nombres y ciudades (col 1 y 5)
Extrae el campo 1 (Nombre) y el campo 5 (Ciudad), delimitados por coma.
Extrae el campo 1 (Nombre) y el campo 5 (Ciudad), delimitados por coma.
cut -d ',' -f 1,5 datos_ventas.csv
6.2 Extraer solo los precios (col 4)
Muestra únicamente los valores de la columna Precio.
Muestra únicamente los valores de la columna Precio.
cut -d ',' -f 4 datos_ventas.csv
6.3 Extraer desde el campo 3 en adelante
Muestra Cantidad, Precio y Ciudad (campos 3, 4 y 5).
Muestra Cantidad, Precio y Ciudad (campos 3, 4 y 5).
cut -d ',' -f 3- datos_ventas.csv
6.4 Extraer la primera columna de usuarios.csv
Solo los nombres, usando coma como delimitador.
Solo los nombres, usando coma como delimitador.
cut -d ',' -f 1 usuarios.csv
6.5 Extraer los primeros 10 caracteres de cada línea
Usa
Usa
-c para posición de caracteres, no campos.cut -c 1-10 notas.txt
⚠️ Limitación con ls -l:
cut -d ' ' -f 1,3,9 sobre la salida de ls -l no funciona correctamente porque ls usa múltiples espacios como separador. Ver la sección cut vs awk para la solución correcta.7. sort — Ordenar Texto y Datos
Ordena las líneas de un archivo de texto. Por defecto ordena alfabéticamente (lexicográfico). Con
-n ordena numéricamente.Sintaxis: sort [opciones] [archivo]
| Opción | Descripción |
|---|---|
| -r | Ordena en orden inverso (descendente / Z-A). |
| -n | Ordena por valor numérico en lugar de lexicográfico (evita que 10 vaya antes que 2). |
| -k N | Ordena por el campo número N. Se combina con -t para archivos delimitados. |
| -t 'DELIM' | Especifica el delimitador de campos (como en cut). |
| -u | Elimina duplicados automáticamente al ordenar (equivale a sort | uniq). |
Ejemplos prácticos
7.1 Ordenar alfabéticamente (A-Z)
Ordena las líneas de lista_productos.txt de la A a la Z.
Ordena las líneas de lista_productos.txt de la A a la Z.
sort lista_productos.txt
7.2 Ordenar en orden inverso (Z-A)
Ordena por el campo 1 (Nombre) en orden alfabético inverso.
Ordena por el campo 1 (Nombre) en orden alfabético inverso.
sort -t ',' -k 1 -r datos_ventas.csv
7.3 Ordenar por Precio (numérico, ascendente)
Ordena numéricamente por el campo 4 — sin
Ordena numéricamente por el campo 4 — sin
-n, el 25 iría después del 1200 (orden texto).sort -t ',' -k 4 -n datos_ventas.csv
7.4 Ordenar por edad en CSV
Ordena usuarios.csv por la tercera columna (edad) de forma numérica.
Ordena usuarios.csv por la tercera columna (edad) de forma numérica.
sort -t ',' -k3 -n usuarios.csv
7.5 Eliminar duplicados al ordenar
Ordena y elimina duplicados en un solo paso.
Ordena y elimina duplicados en un solo paso.
sort -u nombres.txt
💡 -n es crucial con números: Sin
-n, el orden es lexicográfico: 10 va antes que 2 (porque "1" < "2"). Con -n se ordenan como números reales.8. uniq — Filtrar Duplicados
Filtra o reporta líneas repetidas. Importante: solo detecta líneas idénticas adyacentes. Por eso casi siempre se usa precedido de
sort.Sintaxis: uniq [opciones] [archivo]
| Opción | Descripción |
|---|---|
| -c | Cuenta el número de ocurrencias de cada línea única (prefija el recuento). |
| -d | Muestra solo las líneas que están duplicadas (aparecen más de una vez). |
| -u | Muestra solo las líneas que son únicas (no se repiten en absoluto). |
El patrón sort | uniq
sort
Agrupa las líneas iguales — los duplicados quedan adyacentes.
›
uniq
Ahora puede detectar duplicados correctamente y filtrarlos.
›
resultado
Líneas únicas, con conteo, o solo duplicadas según la opción.
Ejemplos prácticos
8.1 Mostrar productos únicos
sort agrupa → uniq elimina duplicados. Resultado: Laptop, Monitor, Mouse, Teclado.
sort agrupa → uniq elimina duplicados. Resultado: Laptop, Monitor, Mouse, Teclado.
sort lista_productos.txt | uniq
8.2 Contar ocurrencias de cada producto
Muestra cuántas veces aparece cada producto único en la lista.
Muestra cuántas veces aparece cada producto único en la lista.
sort lista_productos.txt | uniq -c
8.3 Listar solo los productos duplicados
Muestra solo los que aparecen más de una vez: Laptop, Mouse, Teclado.
Muestra solo los que aparecen más de una vez: Laptop, Mouse, Teclado.
sort lista_productos.txt | uniq -d
8.4 Duplicados consecutivos (sin sort)
Sin sort, uniq solo detecta duplicados que ya están uno al lado del otro.
Sin sort, uniq solo detecta duplicados que ya están uno al lado del otro.
uniq -d frutas.txt
🚨 Error frecuente: Usar
uniq sin sort previo cuando las líneas duplicadas no son contiguas. Siempre que quieras eliminar todos los duplicados, usa sort archivo | uniq o directamente sort -u archivo.9. wc — Word Count
Cuenta el número de líneas, palabras y caracteres/bytes de un archivo. Útil para obtener métricas rápidas y en tuberías para contar resultados.
Sintaxis: wc [opciones] [archivo]
| Opción | Descripción |
|---|---|
| -l | Muestra solo el número de líneas. |
| -w | Muestra solo el número de palabras. |
| -c | Muestra solo el número de bytes. |
| -m | Muestra solo el número de caracteres (distinto de bytes en UTF-8). |
Ejemplos prácticos
9.1 Contar líneas, palabras y bytes
Muestra las tres estadísticas:
Muestra las tres estadísticas:
8 8 82 lista_productos.txtwc datos_ventas.csv
9.2 Contar solo el número de líneas
Muestra que el archivo tiene 8 líneas.
Muestra que el archivo tiene 8 líneas.
wc -l lista_productos.txt
9.3 Contar palabras en varios archivos
Muestra el conteo individual de cada .txt y el total al final.
Muestra el conteo individual de cada .txt y el total al final.
wc -w *.txt
9.4 Contar archivos en el directorio actual
ls lista un archivo por línea → wc -l cuenta cuántas líneas hay.
ls lista un archivo por línea → wc -l cuenta cuántas líneas hay.
ls | wc -l
9.5 Contar productos extraídos con cut
Extrae la columna de productos y cuenta cuántos hay (incluyendo la cabecera).
Extrae la columna de productos y cuenta cuántos hay (incluyendo la cabecera).
cut -d ',' -f 2 datos_ventas.csv | wc -w
bash — salida típica de wc
# wc sin opciones muestra: líneas palabras bytes
$ wc notas.txt
61 164 1344 notas.txt
# ↑ ↑ ↑
# líneas palabras bytes
10. tee — Bifurcar el Flujo
Lee la entrada estándar y la escribe simultáneamente en pantalla y en uno o más archivos. Su nombre viene de la forma de la letra T — divide el flujo de datos.
Sintaxis: comando | tee [opciones] archivo
stdin / pipe
→
tee
bifurca el flujo
stdout (pantalla) — siempre
archivo.txt — guarda una copia
archivo2.txt — puede ser múltiples
| Opción | Descripción |
|---|---|
| -a | Añade (append) la salida al final del archivo en lugar de sobrescribirlo. |
Ejemplos prácticos
10.1 Guardar y mostrar simultáneamente
Muestra informe.log en pantalla Y lo guarda en salida_cat.txt.
Muestra informe.log en pantalla Y lo guarda en salida_cat.txt.
cat informe.log | tee salida_cat.txt
10.2 Añadir al archivo sin sobrescribir
Muestra el mensaje en pantalla Y lo añade al final de informe.log.
Muestra el mensaje en pantalla Y lo añade al final de informe.log.
echo "Tarea finalizada." | tee -a informe.log
10.3 Guardar resultado de un comando
Muestra las primeras 5 líneas en pantalla Y las guarda en un archivo.
Muestra las primeras 5 líneas en pantalla Y las guarda en un archivo.
head -n 5 informe.log | tee primeras.txt
10.4 Guardar lista de archivos
Muestra el listado en pantalla Y lo guarda en notas.txt.
Muestra el listado en pantalla Y lo guarda en notas.txt.
ls -l | tee notas.txt
10.5 Guardar log de ejecución de script
La salida del script se muestra en pantalla Y se guarda en el log.
La salida del script se muestra en pantalla Y se guarda en el log.
./script.sh | tee /home/atu/logs/ejecucion.log
cut vs awk — Cuándo Usar Cada Uno
cut falla con separadores múltiples. awk trata cualquier secuencia de espacios como un único separador — es la solución correcta para la salida de ls -l.⚡ La solución correcta para ls -l
bash
# ❌ Mal — cut falla con múltiples espacios de ls -l
ls -l | cut -d ' ' -f 1,3,9
# ✅ Bien — awk trata cualquier secuencia de espacios como un separador
ls -l | awk '{print $1, $3, $9}'
| Argumento | Propósito | Columna de ls -l |
|---|---|---|
| $1 | Tipo de archivo y permisos (-rw-rw-r--) | Col 1 |
| $3 | Propietario del archivo (atu) | Col 3 |
| $9 | Nombre del archivo (usuarios.csv) | Col 9 |
📌 Regla práctica: Usa
cut para archivos con delimitadores consistentes (CSV con coma, /etc/passwd con dos puntos). Usa awk cuando el separador son espacios variables o necesitas lógica condicional.Combinaciones Poderosas con Pipes
La verdadera potencia aparece al encadenar estos comandos con el operador
|.bash — pipeline sort + uniq + tee + wc
# Ordenar → guardar ordenado → contar líneas
cat usuarios.csv | sort | tee ordenado.csv | wc -l
# Extraer columna → ordenar → contar ocurrencias → guardar
cut -d ',' -f 1 alumnos.csv | sort | uniq -c | tee resumen.txt
# Extraer precios → ordenar numéricamente → mostrar los 3 más baratos
cut -d ',' -f 4 datos_ventas.csv | sort -n | head -n 3
# Contar cuántos archivos .csv hay en el directorio
ls *.csv | wc -l
# Ver productos únicos y cuántas veces aparecen, guardando el resultado
cut -d ',' -f 2 datos_ventas.csv | sort | uniq -c | sort -rn | tee ranking.txt
Ranking de productos más vendidos
cut extrae productos → sort agrupa → uniq -c cuenta → sort -rn ordena por más frecuente → tee guarda.
cut extrae productos → sort agrupa → uniq -c cuenta → sort -rn ordena por más frecuente → tee guarda.
cut -d ',' -f 2 datos_ventas.csv | sort | uniq -c | sort -rn
Ordenar archivo y guardar + contar
Ordena usuarios.csv, guarda en ordenado.csv y muestra cuántas líneas tiene.
Ordena usuarios.csv, guarda en ordenado.csv y muestra cuántas líneas tiene.
cat usuarios.csv | sort | tee ordenado.csv | wc -l
Tabla Resumen Comparativa
Los 5 comandos de procesamiento de texto de un vistazo.
| Comando | Propósito | Ejemplo típico | Nota clave |
|---|---|---|---|
| cut | Extraer columnas o caracteres | cut -d ',' -f 1 archivo.csv |
Usa awk si el separador son espacios múltiples |
| sort | Ordenar líneas | sort -n -k4 -t',' archivo.csv |
Siempre usar -n con números para evitar orden lexicográfico |
| uniq | Eliminar/reportar duplicados | sort archivo.txt | uniq -c |
Solo detecta duplicados adyacentes — usar después de sort |
| wc | Contar líneas/palabras/bytes | ls | wc -l |
Muy útil al final de una tubería para contar resultados |
| tee | Mostrar y guardar simultáneamente | comando | tee archivo.txt |
Usar -a para añadir sin sobrescribir |
Ejercicio Práctico Propuesto
Ejercicio completo que combina los 5 comandos de esta guía con el archivo
alumnos.csv.bash — crear alumnos.csv
# Crear el archivo de práctica
cat > alumnos.csv
Ana,8
Luis,7
Marta,9
Luis,7
Ana,8
# Pulsa Ctrl+D para guardar
🧪 Ejercicios a completar
- Extrae solo los nombres:
cut -d ',' -f 1 alumnos.csv - Ordénalos alfabéticamente:
cut -d ',' -f 1 alumnos.csv | sort - Cuenta cuántas veces aparece cada alumno:
cut -d ',' -f 1 alumnos.csv | sort | uniq -c - Guarda el resultado y muéstralo:
cut -d ',' -f 1 alumnos.csv | sort | uniq -c | tee resumen.txt - Verifica cuántas líneas tiene el resumen:
wc -l resumen.txt - Bonus: Ordena por nota (campo 2) de mayor a menor:
sort -t ',' -k2 -nr alumnos.csv - Bonus: Muestra solo alumnos con nota duplicada:
cut -d ',' -f 2 alumnos.csv | sort | uniq -d
📌 Próximos pasos: Los comandos de esta guía se potencian enormemente con
grep (búsqueda por patrón), awk (procesamiento por columnas) y sed (edición de flujo) — herramientas de las próximas guías de la serie.