En el mundo de Linux y la línea de comandos, sed
y awk
son dos herramientas extremadamente potentes para el procesamiento de texto, cada una con sus propias características y usos especializados:
Sed
- Nombre Completo: Stream Editor (Editor de Flujo).
- Propósito:
sed
es una herramienta utilizada principalmente para transformar o manipular texto en un flujo de datos. Se usa para realizar operaciones básicas de edición de texto directamente desde la línea de comandos o en scripts de shell. - Características Clave:
- Edición de Texto: Puede realizar operaciones como inserción, borrado, búsqueda y reemplazo de texto.
- Scriptable: Puede usarse dentro de scripts para automatizar la edición.
- Expresiones Regulares: Utiliza expresiones regulares, lo que permite realizar modificaciones complejas y específicas.
- Funciona con Flujos: Puede procesar texto en «streaming», es decir, trabajar con datos que están siendo transmitidos, sin necesidad de abrir el archivo completo.
Awk
- Nombre Completo: AWK es un acrónimo derivado de los apellidos de sus creadores: Aho, Weinberger y Kernighan.
- Propósito:
awk
es un lenguaje de programación diseñado para el procesamiento de texto y análisis de datos. Se utiliza para manipular archivos de datos y generar informes. - Características Clave:
- Procesamiento de Campos y Registros: Excelente para trabajar con datos estructurados (como tablas) y puede manipular fácilmente campos y registros individuales.
- Lenguaje de Programación: Incluye variables, operadores lógicos, loops y otras características de un lenguaje de programación.
- Patrones y Acciones: Permite especificar patrones para buscar en los datos y acciones para realizar cuando esos patrones son encontrados.
- Análisis de Datos: Puede sumarizar, agrupar y transformar datos de formas complejas.
Ambas herramientas son estándares en la mayoría de las distribuciones de Unix y Linux y se utilizan ampliamente tanto en tareas de administración del sistema como en procesamiento de datos. Aunque pueden parecer intimidantes al principio debido a su sintaxis y la riqueza de sus capacidades, sed
y awk
son herramientas increíblemente útiles y poderosas una vez que se aprende a utilizarlas.
Ejemplos prácticos de cómo usar sed
y awk
en la consola de Linux para resolver problemas comunes.
Uso de sed
- Reemplazar texto en un archivo
sed 's/original/nuevo/g' archivo.txt
Esto reemplaza todas las ocurrencias de «original» por «nuevo» en archivo.txt
.
- Eliminar líneas que contienen una palabra específica
sed '/palabra/d' archivo.txt
Elimina todas las líneas que contienen «palabra» en archivo.txt
.
- Insertar texto después de una línea específica
sed '3a\Texto a insertar' archivo.txt
Inserta «Texto a insertar» después de la línea 3 en archivo.txt
.
- Eliminar una línea específica
sed '5d' archivo.txt
Elimina la línea 5 de archivo.txt
.
Uso de awk
- Imprimir una columna específica de un archivo
awk '{print $2}' archivo.txt
Imprime la segunda columna de archivo.txt
.
- Sumar valores de una columna
awk '{suma += $3} END {print suma}' archivo.txt
Suma todos los valores de la tercera columna en archivo.txt
.
- Filtrar líneas basadas en un patrón
awk '/patrón/ {print $0}' archivo.txt
Imprime las líneas de archivo.txt
que contienen «patrón».
- Modificar el separador de campos
awk -F, '{print $2}' archivo.csv
Imprime la segunda columna de un archivo CSV (donde el separador es una coma).
Estos ejemplos son básicos y el uso de sed
y awk
puede ser mucho más complejo y potente dependiendo de tus necesidades específicas. Estas herramientas son muy versátiles y pueden ser usadas para una gran variedad de tareas de procesamiento de texto en la consola de Linux.
Aquí te presento algunos trucos útiles que pueden facilitarte la vida:
Trucos con sed
- Convertir un archivo de Windows (CRLF) a Unix (LF)
sed 's/\r$//' archivo_windows.txt > archivo_unix.txt
- Duplicar líneas que contienen una palabra específica
sed '/palabra/ p' archivo.txt
- Eliminar las líneas vacías o que contienen solo espacios
sed '/^ *$/d' archivo.txt
- Reemplazar la n-ésima ocurrencia de una cadena en cada línea
sed 's/palabra/nueva_palabra/3' archivo.txt
Reemplaza la tercera ocurrencia de «palabra» por «nueva_palabra» en cada línea.
- Añadir una línea al principio y al final de un archivo
sed -e '1i\Primera línea' -e '$a\Última línea' archivo.txt
Trucos con awk
- Imprimir líneas cuyo campo n cumple una condición
awk '$2 == "valor"' archivo.txt
Imprime líneas donde el segundo campo es igual a «valor».
- Calcular la media de un campo
awk '{ total += $3; count++ } END { print total/count }' archivo.txt
Calcula la media de los valores en la tercera columna.
- Combinar dos archivos basados en un campo común
awk 'NR==FNR{a[$1]=$0; next} $1 in a' archivo1.txt archivo2.txt
- Imprimir líneas de un archivo que no están en otro
awk 'NR==FNR{a[$0];next} !($0 in a)' archivo1.txt archivo2.txt
- Agregar un encabezado a un archivo CSV
awk 'BEGIN {print "Encabezado1,Encabezado2,Encabezado3"} {print}' archivo.csv
Estos trucos pueden ser adaptados y combinados para satisfacer una amplia variedad de necesidades en el procesamiento de archivos de texto. La clave está en experimentar y familiarizarse con la sintaxis y las opciones que ofrecen sed
y awk
.