Ghost AcademySecLearn// Seguridad Informática
🌐 unfantasmaenelsistema.com
✂️ Redirección y Procesamiento de Texto II · Ubuntu 24.04 · usuario atu
cut sort uniq wc tee
// Manipulación y análisis de texto en Linux — 5 comandos de procesamiento

Segunda parte de la guía de procesamiento de texto en Linux. Extracción de columnas, ordenación, eliminación de duplicados, conteo y bifurcación de flujos. Con archivos CSV de ejemplo y ejercicio práctico final.

cut · -d · -f · -c sort · -r · -n · -k · -t · -u uniq · -c · -d · -u wc · -l · -w · -c · -m tee · -a · bifurcación awk · pipes · combinaciones
📁
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
NombreProductoCantidadPrecioCiudad
AnaLaptop21200Madrid
PedroMouse525Barcelona
MariaTeclado170Madrid
JoseLaptop11200Sevilla
AnaMonitor3300Barcelona
MariaMouse225Sevilla
PedroLaptop31200Madrid
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ónDescripción
-d 'DELIM'Especifica el carácter delimitador de campos (ej: , para CSV, : para /etc/passwd).
-f LISTAEspecifica los campos (columnas) a extraer: un número (2), rango (1-3), lista (1,5), o desde campo N en adelante (3-).
-c POSExtrae 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.
cut -d ',' -f 1,5 datos_ventas.csv
6.2 Extraer solo los precios (col 4)
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).
cut -d ',' -f 3- datos_ventas.csv
6.4 Extraer la primera columna de usuarios.csv
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 -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ónDescripción
-rOrdena en orden inverso (descendente / Z-A).
-nOrdena por valor numérico en lugar de lexicográfico (evita que 10 vaya antes que 2).
-k NOrdena por el campo número N. Se combina con -t para archivos delimitados.
-t 'DELIM'Especifica el delimitador de campos (como en cut).
-uElimina 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.
sort lista_productos.txt
7.2 Ordenar en orden inverso (Z-A)
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 -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.
sort -t ',' -k3 -n usuarios.csv
7.5 Eliminar duplicados al ordenar
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ónDescripción
-cCuenta el número de ocurrencias de cada línea única (prefija el recuento).
-dMuestra solo las líneas que están duplicadas (aparecen más de una vez).
-uMuestra 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 lista_productos.txt | uniq
8.2 Contar ocurrencias de cada producto
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.
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.
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ónDescripción
-lMuestra solo el número de líneas.
-wMuestra solo el número de palabras.
-cMuestra solo el número de bytes.
-mMuestra 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: 8 8 82 lista_productos.txt
wc datos_ventas.csv
9.2 Contar solo el número de 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.
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 | wc -l
9.5 Contar productos extraídos con cut
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ónDescripción
-aAñ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.
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.
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.
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.
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.
./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}'
ArgumentoPropósitoColumna de ls -l
$1Tipo de archivo y permisos (-rw-rw-r--)Col 1
$3Propietario del archivo (atu)Col 3
$9Nombre 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 -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.
cat usuarios.csv | sort | tee ordenado.csv | wc -l
📊
Tabla Resumen Comparativa
Los 5 comandos de procesamiento de texto de un vistazo.
ComandoPropósitoEjemplo típicoNota 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
  1. Extrae solo los nombres: cut -d ',' -f 1 alumnos.csv
  2. Ordénalos alfabéticamente: cut -d ',' -f 1 alumnos.csv | sort
  3. Cuenta cuántas veces aparece cada alumno:
    cut -d ',' -f 1 alumnos.csv | sort | uniq -c
  4. Guarda el resultado y muéstralo:
    cut -d ',' -f 1 alumnos.csv | sort | uniq -c | tee resumen.txt
  5. Verifica cuántas líneas tiene el resumen: wc -l resumen.txt
  6. Bonus: Ordena por nota (campo 2) de mayor a menor:
    sort -t ',' -k2 -nr alumnos.csv
  7. 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.