Ir al contenido principal

Un vistazo a AWK

AWK es un lenguaje de programación diseñado para procesar datos basados en texto, ya sean ficheros o flujos de datos.

El nombre AWK deriva de las iniciales de los apellidos de sus autores: Alfred Aho, Peter Weinberger, y Brian Kernighan. awk, cuando está escrito todo en minúsculas, hace referencia al programa de Unix o Plan 9 que interpreta programas escritos en el lenguaje de programación AWK.

Un programa en AWK tiene la extensión *.awk

Para ejecutar debemos abrir una terminal y teclear:

1
awk -f ./holamundo.awk

Hola mundo en AWK

Desde terminal

1
2
# Hola mundo
awk 'BEGIN {print "Hola, mundo en AWK"; exit;}'

Con un programa (*.awk)

holamundo.awk

1
2
3
4
5
6
7
8
9
#!/usr/bin/awk -f 

# Ejecutar:
# awk -f ./holamundo.awk

BEGIN{
  print "Hola, mundo!!"
  exit;
}

¿Qué se puede hacer con AWK?

Leer el contenido de un archivo

1
2
3
4
5
6
7
8
# Mostrar contenido de un archivo
awk '{print $0}' libros.txt

awk '{print $2}' calificaciones.txt

awk '{print "Nombre: "$1 ", Calificacion: "$2}' calificaciones.txt

awk '{print $NF}' libros.txt

Como se puede ver existen diversas formas de mostrar el contenido de un archivo.

Obtener el tamaño total de los archivos listados

1
2
# Tamaño total de los archivos
ls -l / | awk 'BEGIN {print "Tamanios de los archivos:"} {print $9, $5; total +=$5} END {print "Fin de la lista, suma total: " total} '

Hacer operaciones

1
2
3
4
5
6
7
# Hacer operaciones
echo 8456 | awk '{print ($1/1024)"Kib"}'
echo 3456 | awk '{print ($1/1024)"Kib"}'
echo 11 22 | awk '{print $1 + $2}'
echo 11 22 | awk '{print "Resultado="$1 + $2}'
echo Hola, Fernando | awk '{print $1 $2}'
echo 66 55 | awk '{print $1 $2}'

Bucles

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# Ciclos
echo "66 55 44" | awk '{ total=0; for (i=1; i<=NF; i++) total += $i; print total}'
echo "1 2 3 4 5" | awk '{ total=0; for (i=1; i<=NF; i++) total += $i; print "Total: "total}'
echo "66 55 44" | awk '{ total=0; for (i=1; i<=NF; i++) total += $i; print "Promedio:"(total/NF)}'
echo "11 22 33 44" | awk '{ total=0; for (i=1; i<=NF; i++) total += $i; print "Promedio:"(total/NF)}'

awk '{i=0; while(i<10) { print i; i++;} }' 
awk '{i=0; while(i<10) {print "No. " i; i++;} }' 

awk 'BEGIN {i=0; while(i<10) { print i; i++;} }' 
awk 'BEGIN {i=0; while(i<10) { print "Hola no." i; i++;} }' 
awk 'BEGIN {i=10; while(i>0) { print "Hola no." i; i--;} }' 

echo "Hasta la proxima amigos" | awk '{for(i=1; i<=NF;i++){printf "%s \n", $i} }'
echo "Hasta la proxima amigos" | awk '{for(i=1; i<=NF;i++){printf "%s \n", $i; system("sleep 1")} }'
echo "Hasta la proxima amigos" | awk '{for(i=1; i<=NF;i++){printf "%s \n", $i; system("sleep 1")}; print "!! :-)" }'

Todo completo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# Mostrar contenido de un archivo
awk '{print $0}' libros.txt
awk '{print $2}' calificaciones.txt
awk '{print "Nombre: "$1 ", Calificacion: "$2}' calificaciones.txt
awk '{print $NF}' libros.txt


# Hola mundo
awk 'BEGIN {print "Hola, mundo en AWK"}'
awk 'BEGIN {print "Hola, mundo en AWK"; exit;}'


# Ciclos
awk '{i=0; while(i<10) { print i; i++;} }' 
awk '{i=0; while(i<10) {print "No. " i; i++;} }' 

awk 'BEGIN {i=0; while(i<10) { print i; i++;} }' 
awk 'BEGIN {i=0; while(i<10) { print "Hola no." i; i++;} }' 
awk 'BEGIN {i=10; while(i>0) { print "Hola no." i; i--;} }' 

echo "Hasta la proxima amigos" | awk '{for(i=1; i<=NF;i++){printf "%s \n", $i} }'
echo "Hasta la proxima amigos" | awk '{for(i=1; i<=NF;i++){printf "%s \n", $i; system("sleep 1")} }'
echo "Hasta la proxima amigos" | awk '{for(i=1; i<=NF;i++){printf "%s \n", $i; system("sleep 1")}; print "!! :-)" }'

# Tamaño total de los archivos
ls -l / | awk 'BEGIN {print "Tamanios de los archivos:"} {print $9, $5; total +=$5} END {print "Fin de la lista, suma total: " total} '


# Tamaños de los archivos
ls -l / | awk 'BEGIN {print "Tamanios de los archivos:"} {print $9, $5} END {print "Fin de la lista"} '


# Ciclos
echo "66 55 44" | awk '{ total=0; for (i=1; i<=NF; i++) total += $i; print total}'
echo "1 2 3 4 5" | awk '{ total=0; for (i=1; i<=NF; i++) total += $i; print "Total: "total}'
echo "66 55 44" | awk '{ total=0; for (i=1; i<=NF; i++) total += $i; print "Promedio:"(total/NF)}'
echo "11 22 33 44" | awk '{ total=0; for (i=1; i<=NF; i++) total += $i; print "Promedio:"(total/NF)}'


# Último elemento
echo "Hola, mundo que tal" | awk '{print $NF}'
echo "Hola, mundo que tal" | awk '{print $0}'
echo "Hola, mundo que tal" | awk '{print $1}'
echo "Hola, mundo que tal" | awk '{print $2}'
echo "Hola, mundo que tal" | awk '{print $3}'
echo "Hola, mundo que tal" | awk '{print $4}'

# Hacer operaciones
echo 8456 | awk '{print ($1/1024)"Kib"}'
echo 3456 | awk '{print ($1/1024)"Kib"}'
echo 11 22 | awk '{print $1 + $2}'
echo 11 22 | awk '{print "Resultado="$1 + $2}'
echo Hola, Fernando | awk '{print $1 $2}'
echo 66 55 | awk '{print $1 $2}'

# Mostrar tamaños
ls -l / | awk '{print $5}'
ls -l / | awk '{print $5/1024}'
ls -l / | awk '{print "Tamaño: "$5/1024}'
ls -l / | awk '{print "Tamaño: "$5/1024" Kib"}'


# Listar columna $1, $3 y $4 con delimitador -F
cat /etc/passwd | awk -F':' '{print $3 $4}' 
cat /etc/passwd | awk -F':' '{print "#"$3" : "$4}' 

# Listar columna $3 y $4 con delimitador -F
cat /etc/passwd | awk -F':' '{print $3 $4}' 

# Listar columna $3 y $4
cat /etc/passwd | awk '{print $3 $4}' 

# Listar contenido de /etc/passwd
cat /etc/passwd | awk -F':' '{print $1}' 


# Listar todo
ls -l / | awk -F':' '{print $1}'


# Listar pimer columna
ls -l / | awk '{print $1}'

En próximos post se verán más ejemplos.

Comentarios

Entradas populares de este blog

Odin language: el lenguaje de programación orientado a datos para un desarrollo de software sensato

En esta serie sobre lenguajes de programación hablamos de Odin , un lenguaje orientado a datos. Un nuevo lenguaje de programación que nos podrá recordar a lenguajes como C++, Python, Golang o hasta Rust. Instalación (Windows): 1 2 3 4 $ git clone https://github.com/odin-lang/Odin $ cd Odin $ git pull $ build.bat release Debemos asegurarnos de crear la variable de entorno: Nombre: ODIN_HOME Valor: C:\Users\HP\Documents\pruebasOdin\Odin Ejemplo 1. Como primer programa tendremos al clásico "Hola, mundo". holamundo.odin package holamundo import " core:fmt " main : : proc ( ) { fmt . println ( " ¡Hola, mundo desde Odin! " ) } Construimos: $ odin build holamundo . odin - file Ejecutamos: $ holamundo .exe Recordar que si usamos Visual Studio Code podemos instalar el plugin de Odin Language: https://marketplace.visualstudio.com/items?itemName=DanielGavin.ols Ejemplo 2. Programa que muestre las variables que pod...

Programación Windows Batch (CMD) parte 3

Crear ciclos para efectuar operaciones tediosas nos ahorrará tiempo para realizar otras tareas. En está ocasión veremos ciclos con FOR . ¿Cuál es la síntaxis de bucle FOR en Windows Batch? Si está dentro de un archivo *.bat : FOR %%variable IN (seq) DO operaciones Si lo ejecutamos en una terminal: FOR %variable IN (seq) DO operaciones Ejemplo 1 . Recorrer una secuencia de números del 0 al 5: recorrer.bat @ echo off FOR %%i in ( 0 1 2 3 4 5 ) DO echo Hola no. %%i pause Nos imprimirá en pantalla: Hola no. 0 Hola no. 1 Hola no. 2 Hola no. 3 Hola no. 4 Hola no. 5 ¿Puedo usar contadores? Si, se pueden usar. Ejemplo 2 . Uso de contadores: contador.bat @ echo off set numeros = 1 2 3 4 5 6 7 8 9 10 set cont = 0 for %%a in ( %numeros% ) do ( echo Hola no. %%a :: Contador set /a cont+ = 1 ) echo Total: %cont% Este código nos imprimirá, además de los mensajes Hola no. 0 ..., el total de valores conta...

z/OS, ¿Qué es? y ¿Cuáles son sus herramientas?

  En este post veremos las herramientas de z/OS de IBM. z/OS es un sistema operativo de mainframe desarrollado por IBM.  Es parte de la serie IBM z Systems (anteriormente conocida como System z), que se utiliza en los sistemas mainframe de IBM. z/OS es uno de los sistemas operativos más utilizados en el mundo empresarial para ejecutar aplicaciones críticas y procesar grandes volúmenes de datos. Características clave de z/OS: Escalabilidad : z/OS es conocido por su capacidad para manejar grandes cargas de trabajo y escalabilidad vertical, lo que permite agregar recursos de hardware para satisfacer las demandas de procesamiento. Confiabilidad y disponibilidad : z/OS está diseñado para ofrecer alta disponibilidad y confiabilidad. Incorpora características como redundancia y recuperación ante fallas para garantizar la continuidad de las operaciones. Seguridad : Proporciona una amplia gama de funciones de seguridad, como autenticación, autorización y auditoría, para proteger los...