Awk: Aprendiendo Shell Scripting usando el comando de terminal awk

Awk: Aprendiendo Shell Scripting usando el comando de terminal awk

El comando “awk” en los Sistemas Operativos Libres del tipo GNU/Linux es un comando muy poderoso, que nos ayuda a tener un mayor control al momento de procesar datos provenientes de otros comandos u ordenes de comandos. El nombre AWK deriva de las iniciales de los apellidos de sus autores: Alfred Aho, Peter Weinberger, y Brian Kernighan.

Este comando proporciona un lenguaje de scripting para el procesamiento de texto con el cual podemos: Definir variables, utilizar cadenas y operadores aritméticos, utilizar control de flujo y ciclos y generar reportes con formato. En realidad, Awk es más que un simple comando de procesamiento de patrones, es todo un lenguaje de análisis semántico.

Introducción al comando “awk”

AWK fue una de las primeras utilidades de consola de gran popularidad a la hora de gestionar (manejar/extraer) datos mediante la maximización de la funcionalidad de las tuberías de UNIX. El lenguaje proveído por esta utilidad actualmente es un estándar en casi todo los Sistema Operativo tipo UNIX moderno, tanto que es parte de las Especificaciones básicas de UNIX, por lo que se suele encontrar ya instalado en la mayoría de los mismos por defecto.

Su sintaxis más común es: awk ‘programa’ archivos y donde ‘programa’ puede ser: patrón {acción} patrón {acción}. El comando lee en la entrada de archivos un renglón a la vez. Cada renglón se compara con cada patrón en orden; para cada patrón que concuerde con el renglón se efectúa la acción correspondiente.

Un ejemplo sencillo como:

awk -F: '$1=="root" {print}' /etc/passwd

pregunta por el primer campo si es root de cada línea del /etc/passwd y la imprime considerando como separador de campos el “:” con -F: .

Ejemplos Prácticos

Lista de comandos más usado

Visualizar una lista basada en el historial del terminal del Sistema ordenados desde el usado con mayor frecuencia al menor.

history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head

Ejemplo:

Gráfico (Tabla) con número de conexiones por cada host

Crear un gráfico basado en texto ASCII que muestre el número total de conexiones del host a cada dirección IP.

netstat -an | grep ESTABLISHED | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | awk '{ printf("%s\t%s\t",$2,$1) ; for (i = 0; i < $1; i++) {printf("*")}; print "" }'

Ejemplo:

Listado de Directorios por tamaños

Imprimir por pantalla la lista de directorios de la ruta actual desde el más grande al más pequeño mostrando las etiquetas correspondientes a su tamaño usando las letras: g, m, y k.

du --max-depth=1 | sort -r -n | awk '{split("k m g",v); s=1; while($1>1024){$1/=1024; s++} print int($1)" "v[s]"\t"$2}'

Ejemplo:

Mostrar el trafico de una Interfaz de Red

Visualizar en línea el consumo de datos saliente y entrante en kilobytes (kb) de una interfaz de red indicada.

while [ /bin/true ]; do OLD=$NEW; NEW=`cat /proc/net/dev | grep eth0 | tr -s ' ' | cut -d' ' -f "3 11"`; echo $NEW $OLD | awk '{printf("\rin: % 9.2g\t\tout: % 9.2g", ($1-$3)/1024, ($2-$4)/1024)}'; sleep 1; done

Ejemplo:

Obtener una serie numérica fibonacci

Crear una lista de X cantidad números siguiendo un patrón fibonacci dados 2 números bases para ser construida.

seq 50| awk 'BEGIN {a=1; b=1} {print a; c=a+b; a=b; b=c}'

Ejemplo:

Listado gráfico de la estructura de archivo por tamaño

Obtener un Listado de todas las carpetas de la raíz del sistema operativo junto a la representación gráfica (barras) y numérica en forma de porcentaje de su tamaño dentro del mismo.

t=$(df|awk 'NR!=1{sum+=$2}END{print sum}');sudo du / --max-depth=1|sed '$d'|sort -rn -k1 | awk -v t=$t 'OFMT="%d" {M=64; for (a=0;a<$1;a++){if (a>c){c=a}}br=a/c;b=M*br;for(x=0;x<b;x++){printf "\033[1;31m" "|" "\033[0m"}print " "$2" "(a/t*100)"% total"}'

Ejemplo:

Listar un resumen de los tipos de archivo en un Directorio

Mostrar un listado de los tipos de archivos contenidos en un directorio junto a la cantidad de archivos que le corresponde.

find . -type f | awk -F'.' '{print $NF}' | sort| uniq -c | sort -g

Ejemplo:

Estos ejemplos de lineas de comando usando el comando awk espero les sea de gran utilidad. Y les sirvan para ser utilizadas directamente desde consola o indirectamente mediante su inserción en algún script (tarea automatizada).

En la siguiente publicación sobre Shell Scripting exploraremos otros comandos.

Si quieres aprender un poco más sobre el comando “grep” visita este enlace “Wiki DEBIAN” y si deseas aprender más sobre Shell Scripting en nuestro propio Blog, puedes darle un vistazo a nuestras otras publicaciones sobre el tema, haciendo clic aquí: Scripting en DesdeLinux


Categorías

GNU/Linux

Administrador de Servidores y Telecomunicaciones con certificación internacional de Linux: 1.- Certified Linux Administrator (CLA) 2.- Certified Linux Operator (CLI)

Un comentario

  1.   Tuxito dijo

    Solo entendí el primer ejemplo, del resto nada 🙁

Deja un comentario

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

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.