Sie sind auf Seite 1von 7

EJEMPLOS DE USO AWK.

La sintaxis general utilizada para el mandato awk sigue el siguiente patrn:

awk 'expresin-regular { orden }'

A continuacin se mostrarn ejemplos del uso de AWK.

El siguiente mandato especfica que al inicio se imprima en la salida la frase "Hola mundo" y terminar el procesamiento.

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

Lo anterior deber devolver una salida como la siguiente:

Hola mundo

Si se genera el archivo prueba.txt del siguiente modo:

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

Y se visualiza con el mandato cat:

cat ejemplo.txt

Devolver el siguiente contenido:

Columna1

Columna2

Columna3

Columna4

Si se utiliza el mandato awk para que solo muestre la columna 1 y la columna 3 del siguiente modo:

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

La salida devolver lo siguiente:

Columna1 Columna3

Si se utiliza el mandato awk para que solo muestre la columna 3 y la columna 1, en ese orden, del siguiente modo:

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

La salida devolver lo siguiente:

Columna3 Columna1

Si se aaden datos al archivo ejemplo.txt del siguiente modo:

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

Y se visualiza con el mandato cat:

cat ejemplo.txt

Devolver el siguiente contenido:

Columna1 Dato1 Dato5 Dato9 Dato2 Dato6 Dato10

Columna2 Dato3 Dato7 Dato11 Dato4 Dato8 Dato4

Columna3

Columna4

Si se utiliza nuevamente el mandato awk para que solo muestre la columna 1 y la columna 3 del siguiente modo:

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

La salida devolver lo siguiente:

Columna1 Columna3 Dato1 Dato3 Dato5 Dato7 Dato9 Dato11

Si se utiliza el mandato awk del siguiente modo para que solo muestre solo la lnea cuya columna contenga la expresin regular Dato5:

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

La salida devolver lo siguiente:

Dato5

Dato6

Dato7

Dato8

Si se utiliza el mandato awk del siguiente modo para que solo muestre solo la lnea cuya columna contenga la expresin regular Dato5, y adems solo las columnas 1 y 4:

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

La salida devolver lo siguiente:

Dato5 Dato8

Si se utiliza el mandato awk del siguiente modo para que muestre solo las lneas con ms de 35 caracteres en el archivo /etc/crontab:

awk 'length > 35' /etc/crontab

La salida devolver lo siguiente:

01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly

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

awk 'length < 35' /etc/crontab

La salida devolver lo siguiente:

SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/

# run-parts

Utiliza vi para crear el archivo usuario.txt:

vi usuario.txt

Ingrese el siguiente contenido:

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

Para que el mandato awk reconozca cada lnea 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 deRS (Record Separator o separador de registro) se establece como una lnea vaca. 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 lnea) separados por una coma y un espacio:

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

La salida devolver lo siguiente:

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

El mandato awk puede realizar conteo de lneas, palabras y caracteres. El siguiente mandato se establece que el valor de w sea igual al nmero de campos (New Field o NF), c sea igual la longitud de cada campo, y que se imprima el nmero 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 devolver lo siguiente:

Campos: 4 Palabras: 12 Caracteres: 74

Genere el archivo numeros.txt con el siguiente contenido, donde las columnas sern separadas por un tabulador:

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

El mandato awk puede realizar operaciones matemticas. 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 devolver lo siguiente (resultado de la suma de 1+5+9):

15

Si se hace lo mismo, pero con los valores de la columna 2:

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

La salida devolver 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 lnea) 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 nmero 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 devolver lo siguiente:

7 bin 3 run 5 etc 4 sbin 3 bash 1 weekly 1 daily 1 cron 4 usr 2 path 1 shell 1 parts 5 home 1 mailto 1 monthly 1 hourly 1 root 6