InicioLinuxIntroduccion a AWK

Hola amig@s de T! bueno hoy voy a compartir con ustedes una pequeña guia introductoria para aprender a usar el comando o lenguaje de programacion AWK

Ok empecemos..!


Introduccion a AWK



Acerca de AWK.

AWK, cuyo nombre deriva de la primera letra de los apellidos de sus autores Alfred Aho, Peter Weinberger y Brian Kernighan, es un lenguaje de programación que fue diseñado con el objetivo de procesar datos basados sobre texto y una de las primeras herramientas en aparecer en Unix. Utiliza listas en un índice ordenado por cadenas clave (listas asociativas) y expresiones regulares.
Es un lenguaje ampliamente utilizado para la programación de guiones ejecutables pues añade funcionalidad a las tuberías en los sistemas operativos tipo POSIX. Está incluido en las instalaciones básicas de prácticamente todas las distribuciones de GNU/Linux.

Estructura de los programas escritos en AWK.

El comando awk utiliza un archivo o emisión de ordenes y un archivo o emisión de entrada. El primero indica como procesar al segundo. El archivo de entrada es por lo general texto con algún formato que puede ser un archivo o bien la salida de otro mandato.

La sintaxis general utilizada para el mandato awk sigue el siguiente patrón:

awk 'expresión-regular { orden }'



Cuando se utiliza el comando awk, este examina el archivo de entrada y ejecuta la orden cuando encuentra la expresión regular especificada.

El siguiente modelo ejecutaría la orden al inicio del programa y antes de que sean procesados los datos del archivo de entrada:

awk 'BEGIN { orden }'


El siguiente modelo ejecutaría la orden al final del programa y después de que sean procesados los datos del archivo de entrada:

awk 'BEGIN { orden }'


El siguiente modelo ejecutaría la orden por cada una de las líneas del archivo de entrada:

awk '{ orden }'


Procedimientos

A continuación se mostrarán ejemplos del uso de AWK.

El siguiente comando específica que al inicio se imprima en la salida la frase "Hola mundo" y terminar el procesamiento.

awk 'BEGIN { print "Hola mundo"; exit }'



La linea anterior debera devolver una salida como la siguiente:

Hola Mundo



Ahora generaremos un archivo "ejemplo.txt" del siguiente modo:

echo -e "Columna1\tColumna2\tColumna3\tColumna4\n" > ejemplo.txt


Ahora lo visualizaremos con el comando cat:
 
cat ejemplo.txt
 


Devolvera el siguiente contenido:
 
Columna1     Columna2      Columna3     Columna4



Ahora utilizaremos el comando awk para que solo muestre la columna 1 y la columna 3 del siguiente modo:

awk '{ print $1, $3}' ejemplo.txt



La salida anterior devolvera lo siguiente:

Columna1 Columna3



Ahora utilizaremos el comando awk para que solo muestre la columna 3 y la columna 1 del siguiente modo:

awk '{ print $3, $1}' ejemplo.txt



La salida anterior devolvera lo siguiente:

Columna3 Columna1



Para añadir datos al archivo ejemplo.txt se hace de la siguiente manera:

echo -e "Dato1\tDato2\tDato3\tDato4\n" >> ejemplo.txt
echo -e "Dato5\tDato6\tDato7\tDato8\n" >> ejemplo.txt
echo -e "Dato9\tDato10\tDato11\tDato12\n" >> ejemplo.txt


Se visualizara de la siguiente manera:

cat ejemplo.txt


Para utilizar nuevamente el comando awk para que solo muestre la columna 1 y la columna 3 se hace del siguiente modo:

awk '{ print $1, $3}' ejemplo.txt


Si se utiliza el comando awk del siguiente modo para que solo muestre solo la línea cuya columna contenga la expresión regular Dato5:

awk '/Dato5/ { print }' ejemplo.txt


La salida devolvera lo siguiente:

Dato5      Dato6     Dato7     Dato8


Si se utiliza el comando awk del siguiente modo para que solo muestre solo la línea cuya columna contenga la expresión regular Dato5, y además solo las columnas 1 y 4:

awk '/Dato5/ { print $1, $4 }' ejemplo.txt


La salida devolvera lo siguiente:

Dato5    Dato8


Si se utiliza el comando awk del siguiente modo para que muestre solo las líneas con más de 35 caracteres en el archivo /etc/crontab:

awk 'length > 35' /etc/crontab


La salida devolvera lo siguiente:

17 ** * *root    cd / && run-parts --report /etc/cron.hourly
25 6* * *roottest -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6* * 7roottest -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 61 * *roottest -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )


Si se utiliza el comando awk del siguiente modo para que muestre solo las líneas con menos de 35 caracteres en el archivo /etc/crontab:

awk 'length < 35' /etc/crontab



La salida devolvera lo siguiente:

SHELL=/bin/sh

# m h dom mon dow usercommand
#


Ahora si utilizamos "VI, NANO o algun otro editor de texto" para crear un archivo usuario.txt:

vi usuario.txt



Ingresamos el siguiente contenido:

Fulano Algo
Calle Mengana 123
Colonia Perengana
Ciudad de Zutano, C.P. 123456


Para que el comando awk reconozca cada línea como un registro completo, en lugar de considerar cada palabra como una columna, se utiliza 'BEGIN { FS="n" ; RS=""}', donde el valor de FS (Field Separator o separador de campo) se establece como un retorno de carro y el valor de RS (Record Separator o separador de registro) se establece como una línea vacía. Si utiliza el siguiente mandato donde se establecen los valores mencionados para FS y RS y se pide se impriman los valores de cada registro (cada línea) separados por una coma y un espacio:

awk 'BEGIN { FS="\n"; RS="" } { print $1 ", " $2 ", " $3 ", " $4 }' usuario.txt


La salida le devolvera lo siguiente:

Fulano Algo, Calle Mengana 123, Colonia Perengana, Ciudad de Zutano, C.P. 123456



El comando awk puede realizar conteo de líneas, palabras y caracteres. El el siguiente mandato se establece que el valor de w sea igual al número de campos (New Field o NF), c sea igual la longitud de cada campo, y que se imprima el número de campos, el valor de w y el valor de c:

awk '{ w += NF; c += length} \
END { print \
"Campos: " NR , "\nPalabras: " w, "\nCaracteres: " c }' \
usuario.txt


La salida le devolvera lo siguiente:

Campos: 5 
Palabras: 12 
Caracteres: 74


Ahora generaremos un archivo "numeros.txt" con el siguiente contenido, donde las columnas serab separadas por un tabulador:

1 2 3 4
5 6 7 8
9 10 11 12


El comando awk puede realizar operaciones matemáticas. el siguiente mandato establece que s es igual a la suma del valor de los campos de la primera columna del archivo numeros.txt, e imprime el valor de s:

awk '{ s += $1 } END { print s }' numeros.txt



La salida devolvera lo siguiente (resultado de la suma de 1+5+9):

15



Tambien se puede hacer lo mismo pero con los valores de la columna 2:

awk '{ s += $2 } END { print s }' numeros.txt



La salida devolvera lo siguiente (resultado de la suma de 2+6+10):

18


Para hacer conteo de frecuencia de palabras, Se establece que el valor para FS (Field Separator o separador de línea) sea igual a expresiones regulares que van desde la a a la z y desde la A a la Z, se establece que el valor de la variable i es igual a 1 y menor al número de campos.

awk 'BEGIN { FS="[^a-zA-Z]+"} \
{ for (i=1; i<=NF; i++) words[tolower($i)]++ } \
END { for (i in words) print i, words[i] }' /etc/crontab


La salida devolvera lo siguiente o algo parecido :

 18
of 1
version 1
bin 4
fields 1
this 1
anacron 3
sh 1
monthly 1
sbin 6
local 2
new 1
any 1
run 5
test 3
to 2
cd 4
user 1
usr 7
h 1
dow 1
etc 6
m 1
unlike 1
other 2
install 1
shell 1
system 1
root 4



Bueno amigos eso es todo espero que les sea útil...

Nota: Ya he corregido el inconveniente con la barra invertida \ gracias @alband por el dato ...
Datos archivados del Taringa! original
137puntos
615visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
16visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

p
piruo7🇦🇷
Usuario
Puntos0
Posts27
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.