Guía para un Plan de Recuperación de Desastres en un entorno Kubernetes
Logs de Kubernetes con Grafana Loki y Promtail

Guía del comando AWK

comando awk

El comando AWK es una poderosa herramienta de procesamiento de texto en la línea de comandos de Unix. Se utiliza para buscar, filtrar y manipular datos en archivos de texto de manera eficiente. El nombre AWK deriva de las iniciales de los apellidos de sus autores: Alfred Aho, Peter Weinberger, y Brian Kernighan.

Ya habíamos visto comandos potentes, pero es que AWK es un lenguaje de programación en sí, diseñado para procesar datos basados en texto, ya sean ficheros o flujos de datos. Este comando es un ejemplo de lenguaje de programación que usa ampliamente el tipo de datos de listas asociativas (es decir, listas indexadas por cadenas clave), y expresiones regulares. El poder, brevedad y limitaciones de los programas de AWK y las secuencias de órdenes de sed inspiraron a Larry Wall a escribir Perl. Debido a su densa notación, todos estos lenguajes son frecuentemente usados para escribir programas de una línea.

Usos

El comando AWK se utiliza principalmente en los siguientes casos:

  • Procesamiento y análisis de archivos de texto estructurados.
  • Extracción y manipulación de columnas de datos.
  • Filtrado de líneas de texto que cumplen ciertos patrones.
  • Realización de cálculos matemáticos en datos numéricos.
  • Generación de informes y resúmenes a partir de datos.

Documentación

logo comando awk

Ejemplos

Mostrar en pantalla las columnas que queramos

Para extraer y mostrar columnas específicas de un texto, podemos utilizar el comando AWK con la opción -F para especificar el delimitador de campos y la variable $n para representar la columna deseada.

Extraer las columnas que queramos de un determinado texto

Este comando imprimirá la primera y tercera columna del archivo "archivo.txt", asumiendo que el delimitador de campos es la coma (,).

Cambiar el delimitador por defecto en Awk y extraer la primera columna

awk -F ':' '{print $1}' archivo.txt

Aquí se cambia el delimitador de campos por dos puntos (:) y se imprime solo la primera columna del archivo «archivo.txt».

Extraer varias columnas de texto de forma simultánea con el comando awk

awk -F '|' '{print $2, $4}' archivo.txt

En este caso, se utiliza el carácter de barra vertical (|) como delimitador de campos y se imprimen la segunda y cuarta columna del archivo «archivo.txt».

Fijar un delimitador con la opción FS e imprimir varias columnas

awk 'BEGIN {FS = ":"} {print $1, $3}' archivo.txt

Aquí se establece el delimitador de campos como dos puntos (:) utilizando la opción BEGIN de AWK. Luego se imprime la primera y tercera columna del archivo «archivo.txt».

Combinar el uso de FS con OFS en awk para tener un delimitador en la salida mostrada en pantalla

awk -F ':' 'BEGIN {OFS = "|"} {print $1, $3}' archivo.txt

En este ejemplo, se configura el delimitador de campos como dos puntos (:) y se establece el delimitador de salida como una barra vertical (|) utilizando la opción BEGIN. Luego se imprime la primera y tercera columna del archivo «archivo.txt» con el nuevo delimitador de salida.

Imprimir en pantalla únicamente el último delimitador de una salida con awk mediante $NF

awk -F '/' '{print $NF}' archivo.txt

Aquí se utiliza el carácter de barra diagonal (/) como delimitador de campos y se imprime únicamente el último delimitador de cada línea del archivo «archivo.txt» utilizando la variable $NF.

Imprimir el contenido del penúltimo o antepenúltimo delimitador mediante $NF

awk -F '/' '{print $(NF-1)}' archivo.txt

En este caso, se utiliza el carácter de barra diagonal (/) como delimitador de campos y se imprime el contenido del penúltimo delimitador de cada línea del archivo «archivo.txt» utilizando la expresión $(NF-1).

Operar con líneas de texto mediante el comando awk

El comando AWK también permite realizar diversas operaciones con líneas de texto.

Imprimir únicamente las líneas que sigan un determinado patrón

awk '/patrón/ {print}' archivo.txt

Este comando imprimirá todas las líneas del archivo «archivo.txt» que contengan el patrón especificado.

Mostrar únicamente las líneas que empiezan o finalizan por un determinado patrón

awk '/^patrón/ {print}' archivo.txt
awk '/patrón$/ {print}' archivo.txt

Estos comandos imprimirán únicamente las líneas del archivo «archivo.txt» que comienzan (^) o terminan ($) con el patrón especificado.

Mostrar las columnas que queramos de únicamente las líneas que cumplen una determinada condición

awk '/condición/ {print $2, $4}' archivo.txt

quí se imprimirán la segunda y cuarta columna de las líneas del archivo «archivo.txt» que cumplen la condición especificada.

Mostrar únicamente las líneas que tengan una longitud de caracteres determinada mediante lenght

awk 'length == 10 {print}' archivo.txt

En este ejemplo, se imprimirán únicamente las líneas del archivo «archivo.txt» que tengan una longitud de 10 caracteres utilizando la función length.

Mostrar filas que deben cumplir con varias condiciones de forma simultanea con el operador &&

awk '/condición1/ && /condición2/ {print}' archivo.txt

Este comando imprimirá las líneas del archivo «archivo.txt» que cumplan simultáneamente con las dos condiciones especificadas.

Ver la longitud de cada una de las líneas con el comando awk mediante ‘{print length}’

awk '{print length}' archivo.txt

Aquí se imprimirá la longitud de cada línea del archivo «archivo.txt».

Imprimir la longitud de únicamente las líneas que tengan un determinado número de caracteres

awk 'length == 5 {print length}' archivo.txt

En este caso, se imprimirá la longitud de las líneas del archivo «archivo.txt» que tengan exactamente 5 caracteres.

Imprimir todas las líneas cuyo último delimitador sea igual a una determinada palabra mediante el condicional if

awk -F ':' '{if ($NF == "palabra") print}' archivo.txt

Aquí se establece el delimitador de campos como dos puntos (:) y se imprimirán todas las líneas del archivo «archivo.txt» cuyo último delimitador sea igual a la palabra especificada.

Contar el número de líneas de un fichero o de la salida de un comando con NR (Número de registros)

awk 'END {print NR}' archivo.txt

Este comando contará el número total de líneas del archivo «archivo.txt» utilizando la variable NR.

Imprimir la primera línea de un fichero o de la salida de un comando con la opción NR

awk 'NR == 1 {print}' archivo.txt

Aquí se imprimirá la primera línea del archivo «archivo.txt» utilizando la opción NR de AWK.

Imprimir todas las filas de un fichero a partir de una determinada línea mediante la opción NR

awk 'NR >= 5 {print}' archivo.txt

Este comando imprimirá todas las líneas del archivo «archivo.txt» a partir de la quinta línea utilizando la opción NR de AWK.

Imprimir todas las líneas de un documento o salida que empiezan con un determinado carácter o string

awk '/^patrón/ {print}' archivo.txt

Aquí se imprimirán todas las líneas del archivo «archivo.txt» que comienzan con el patrón especificado.

Imprimir eliminando los x primeros caracteres de cada línea mediante el parámetro substr

awk '{print substr($0, 3)}' archivo.txt

En este ejemplo, se imprimirán todas las líneas del archivo «archivo.txt», eliminando los primeros 3 caracteres de cada línea utilizando la función substr.

Imprimir un rango de líneas determinadas mediante el comando awk y NR

awk 'NR >= 3 && NR <= 7 {print}' archivo.txt

Este comando imprimirá un rango de líneas del archivo «archivo.txt», desde la tercera hasta la séptima línea, utilizando la variable NR y el operador &&.

Saber en qué posición de una línea aparece una palabra o combinación de letras determinada mediante match y RSTART

awk 'match($0, /patrón/) {print RSTART}' archivo.txt

Aquí se imprimirá la posición en la que se encuentra el patrón especificado en cada línea del archivo «archivo.txt» utilizando la función match y la variable RSTART.

Mostrar la longitud de un patrón mediante el parámetro RLENGTH

awk 'match($0, /patrón/) {print RLENGTH}' archivo.txt

En este caso, se imprimirá la longitud del patrón encontrado en cada línea del archivo «archivo.txt» utilizando la variable RLENGTH.

Realizar operaciones matemáticas con el comando awk

El comando AWK también permite realizar cálculos matemáticos en datos numéricos.

Realizar operaciones matemáticas con variables y awk

awk 'BEGIN {a = 5; b = 3; c = a + b; print c}' archivo.txt

Este ejemplo realiza la operación matemática de suma entre las variables a y b y almacena el resultado en la variable c, luego imprime el valor de c.

Calcular la raíz cuadrada de un número mediante awk

awk 'BEGIN {x = 16; sqrt_x = sqrt(x); print sqrt_x}' archivo.txt

Aquí se calcula la raíz cuadrada del número 16 utilizando la función sqrt y se imprime el resultado.

logo comando awk

Ejecutar scripts con el comando awk

El comando AWK permite ejecutar scripts almacenados en archivos.

awk -f script.awk archivo.txt

En este caso, especificamos la opción -f seguida del nombre del archivo que contiene el script, en este ejemplo «script.awk». Además, proporcionamos el nombre del archivo de entrada, en este caso, «archivo.txt».

Al ejecutar este comando, AWK interpretará y ejecutará el código contenido en el archivo «script.awk» utilizando los datos proporcionados por el archivo «archivo.txt». Esto te permite automatizar tareas complejas y aplicar transformaciones personalizadas a tus conjuntos de datos de manera eficiente.

Un ejemplo de script:

#!/usr/bin/awk -f

# Imprimir únicamente las líneas que contienen la palabra "OlaKeAse"
/OlaKeAse/ {
    print
}

# Calcular la suma de los números en la primera columna
{
    sum += $1
}

END {
    print "La suma total es:", sum
}

En este ejemplo, el script realiza dos tareas. Primero, imprime únicamente las líneas que contienen la palabra «OlaKeAse». Esto se logra utilizando un patrón (/OlaKeAse/) que busca la coincidencia de la palabra en cada línea y luego imprime la línea completa (print).

Luego, el script calcula la suma de los números en la primera columna de todas las líneas del archivo de entrada. Cada vez que se encuentra una línea, el valor de la primera columna ($1) se agrega a la variable «sum». Esta operación se realiza para todas las líneas del archivo.

Finalmente, en la sección «END» del script, se imprime el mensaje «La suma total es:» seguido del valor de la variable «sum». Esta sección se ejecuta al finalizar el procesamiento de todas las líneas del archivo.

Buscar y reemplazar texto con el comando awk y gsub

El comando AWK también permite buscar y reemplazar texto en archivos de texto.

Buscar una expresión regular, palabra o letra y reemplazarla por otra

awk '{gsub(/patrón/, "reemplazo"); print}' archivo.txt

Este comando buscará todas las ocurrencias del patrón especificado en cada línea del archivo «archivo.txt» y las reemplazará por el texto especificado en «reemplazo».

Buscar y reemplazar texto en únicamente una columna determinada

awk -F ':' '{gsub(/patrón/, "reemplazo", $2); print}' archivo.txt

Aquí se establece el delimitador de campos como dos puntos (:), luego se buscará y reemplazará el patrón especificado en la segunda columna del archivo «archivo.txt» y se imprimirá el resultado.

Otros usos que podemos dar al comando awk

Imprimir el contenido de un fichero con el comando awk

awk '{print}' archivo.txt

Este comando imprimirá el contenido completo del archivo «archivo.txt».

Ejecutar un comando de bash mediante el comando awk

awk 'BEGIN {system("comando")}' archivo.txt

Aquí se ejecutará el comando especificado dentro de las comillas dobles utilizando la función system de AWK.

Conclusión

Hemos visto que el comando AWK es una poderosa herramienta para el procesamiento y manipulación de texto en entornos de línea de comandos. Con su amplia gama de funcionalidades y su sintaxis concisa, AWK se ha convertido en una elección popular entre los desarrolladores y administradores de sistemas.

Algunas recomendaciones clave para aprovechar al máximo el comando AWK son:

  1. Familiarízate con los conceptos básicos de AWK, como el uso de patrones y acciones, así como el manejo de variables y expresiones regulares.
  2. Utiliza los diferentes comandos y opciones de AWK para filtrar, transformar y manipular datos de manera eficiente.
  3. Aprovecha las capacidades matemáticas de AWK para realizar cálculos y operaciones en tus scripts.
  4. Explora las posibilidades de búsqueda y reemplazo de texto utilizando expresiones regulares con el comando gsub.

Fuente original: https://geekland.eu/uso-del-comando-awk-en-linux-y-unix-con-ejemplos/

Más apuntes

Invítame a un café con bitcoins:
1QESjZDPxWtZ9sj3v5tvgfFn3ks13AxWVZ

Bitcoins para café
También puedes invitarme a algo para mojar...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Rellena este campo
Rellena este campo
Por favor, introduce una dirección de correo electrónico válida.
Tienes que aprobar los términos para continuar