Awk: Aprendiendo Shell Scripting usando el comando de terminal awk

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: .

Ejemplo Introductorio Awk

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:

 Ejemplo 1: Comando Awk

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:

Ejemplo 2: Comando Awk

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:

Ejemplo 3: Comando Awk

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:

Ejemplo 5: Comando Awk

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:

Ejemplo 6: Comando Awk

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:

Ejemplo 8: Comando Awk

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


Un comentario, deja el tuyo

  1.   Tuxito dijo

    Solo entendí el primer ejemplo, del resto nada 🙁

Deja tu 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.