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
Publicar un comentario