La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

2008 Escuela de Informática y Telecomunicaciones, DuocUC Escuela de Informática y Telecomunicaciones Clase 12: Introducción a AWK Nombre unidad de aprendizaje:

Presentaciones similares


Presentación del tema: "2008 Escuela de Informática y Telecomunicaciones, DuocUC Escuela de Informática y Telecomunicaciones Clase 12: Introducción a AWK Nombre unidad de aprendizaje:"— Transcripción de la presentación:

1 2008 Escuela de Informática y Telecomunicaciones, DuocUC Escuela de Informática y Telecomunicaciones Clase 12: Introducción a AWK Nombre unidad de aprendizaje: Programación avanzada de SCRIPTS Programación Aplicada

2 2© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Objetivos  Objetivos de la clase  Construye rutinas scripting para el análisis de LOG.  Construye rutinas scripting Web de monitoreo de proceso y eventos.

3 3© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Procesamiento de registros con AWK  Las expresiones especiales, BEGIN y END, permiten realizar acciones antes de procesar el primer registro de un archivo, y después de procesar el último registro de un archivo, respectivamente.  Todo lo que se especifique en la sección de BEGIN se ejecutará antes de procesar los registros de un archivo.

4 4© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Procesamiento de registros con AWK  BEGIN se suele utilizar para inicializar variables y mostrar mensajes.  Todo lo que se especifique en la sección de END se ejecutará después de haber procesado todos los registros de un archivo.  END habitualmente se emplea para obtener y mostrar resultados finales tras operar con el archivo de datos.

5 5© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Procesamiento de registros con AWK  Estas construcciones presentan la siguiente sintaxis: BEGIN {sentencias}  Preprocesamiento {sentencias}  Procesamiento END {sentencias}  Postprocesamiento

6 6© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Procesamiento de registros con AWK  Veamos un ejemplo, el sencillo script “suma.awk” pone a cero la variable “total” antes de iniciar el proceso del archivo de entrada, añade a esa variable el valor correspondiente al contenido del primer campo de cada registro, y muestra el valor de la variable al final: BEGIN {total=0} {total += $1} END {print “Total=“,total}

7 7© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Procesamiento de registros con AWK  Para ejecutarlo podríamos usar:  Para contar y desplegar en pantalla la cantidad de líneas y palabras de un archivo arch, usaremos el script AWK “contar.awk”: [alumno@localhost ~]$ echo -e "10\n10\n10\n70" ¦ awk -f./suma.awk Total=100

8 8© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Procesamiento de registros con AWK  Para ejecutarlo podríamos usar: BEGIN {lines=0; words=0} { lines++; words += NF; } END {print “Líneas=“,lines,” Palabras=“,words} [alumno@localhost ~]$ awk -f./contar.awk arch Líneas=3 Palabras=12

9 9© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Procesamiento de registros con AWK  Para contar el número de personas conectadas en el sistema, usaremos: w ¦ awk 'BEGIN {cont=0} NR>2 {cont=cont+1} END {print cont}'.

10 10© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Expresiones regulares en AWK  Las EXPRESIONES REGULARES son útiles si se necesita manipular o buscar en documentos de texto.  Los meta-caracteres proporcionan la posibilidad de crear claves de búsqueda bastante complejas.  En la siguiente tabla se especifican los meta- caracteres que pueden ser utilizados en un EXPRESIÓN REGULAR de AWK:

11 11© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Expresiones regulares en AWK ExpresiónSignificado.Coincide con cualquier carácter. ^Encuentra la expresión regular que le sigue, al principio de una línea. $Encuentra la expresión regular que le sigue, al final de una línea. [ ]Coincide con cualquier caracter entre los corchetes. [a-d1-7]Coincide con los caracteres de un rango. En este caso: todas las letras de a hasta d y todos lo dígitos de 1 hasta 7. ?Coincide con 0 ó 1 de la expresión que le precede.

12 12© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Expresiones regulares en AWK  Se puede utilizar !/^…/ para asegurarnos que una línea no “parte” con el patrón dado, como en !/^S/ para encontrar alguna línea que no “parta” con una “S”. ExpresiónSignificado *Coincide con 0 ó más de la expresión que le precede. X|ZO X o Z. XZX seguido de Z.

13 13© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Expresiones regulares en AWK  De manera similar, el patrón !/pattern$/ encuentra todas las líneas donde el patrón no se encuentre al final de la línea.  Veamos algunos ejemplos de uso de EXPRESIONES REGULARES en AWK:  Para obtener el tamaño promedio de los archivos del directorio actual, podemos usar:

14 14© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Expresiones regulares en AWK  Notar que la expresión regular o patrón es /^[^d]/ donde el primer ^ indica “coincidencia al principio de la línea” y el [^d] indica “cualquier cosa que no sea una d”. ls -al ¦ awk ′BEGIN {total=0;count=0} /^[^d]/ {total += $5; count++} END {print total/count}′

15 15© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Expresiones regulares en AWK  Para quitar las líneas vacías del archivo arch, podemos usar: awk ′!/^$/ { print }′ arch.

16 16© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Funciones implícitas de AWK  Las funciones implícitas (Built-in) son funciones que están siempre disponibles para ser llamadas por un programa AWK.  Cada función implícita acepta un cierto número de argumentos. En la mayoría de los casos, cualquier argumento extra que se le pase a la función implícita es ignorado. Los valores por defecto para argumentos omitidos varían de una función a otra y son descritos en cada una de las funciones.

17 17© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Funciones implícitas de AWK  Cuando se llama una función, las expresiones que crean los parámetros actuales de la función son evaluadas completamente antes de realizarse la llamada a la función.  La siguiente es una lista parcial de funciones implícitas de AWK que trabajan con números: int(x), sqrt(x), exp(x), log(x), sin(x), cos(x), atan2(y,x), rand(), srand(x), time().

18 18© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Funciones implícitas de AWK  Por ejemplo, para definir una función de usuario que se pueda utilizar para obtener un entero aleatorio no negativo menor que n, usaremos: function randint(n){ return int(n * rand()) }

19 19© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Introducción a PERL  PERL es un lenguaje de programación que está orientado principalmente a las labores de procesamiento de textos y archivos.  PERL (Practical Extraction and Report Language) es un lenguaje de programación desarrollado por Larry Wall en 1987 a partir de otras herramientas de UNIX como son: ED, GREP, AWK, C SHELL, para la administración de tareas propias de los sistemas UNIX.

20 20© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Introducción a PERL  Estructuralmente, PERL está basado en un estilo de bloques como los del lenguaje C o AWK, y fue ampliamente adoptado por sus facilidades en el procesamiento de texto y de archivos, además de no tener ninguna de las limitaciones de los otros lenguajes de script.  El número de plataformas soportadas es una de las razones por las cuales PERL ha tenido tan buena acogida; existe un PERL para prácticamente todas las plataformas conocidas.

21 21© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Introducción a PERL  PERL no es ni un compilador ni un interprete, está en un punto intermedio, cuando mandamos a ejecutar un programa en PERL, se compila el código fuente a un código intermedio en memoria que se optimiza como si fuésemos a elaborar un programa ejecutable, pero es ejecutado por un motor, como si se tratase de un interprete.

22 22© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Variables y datos en PERL  En PERL no se declaran las variables ni sus tipos.  Las variables van precedidas de caracteres especiales, que hacen referencia a su tipo: “$” para las variables escalares, “@” para listas y % para matrices asociadas o “hashes”.  Un escalar es un solo valor; puede ser un número, un string (cadena de caracteres) o una referencia.

23 23© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Variables y datos en PERL  Las cadenas de caracteres se especifican literalmente por medio de un sucesión de caracteres delimitada por comillas ("..") o apóstrofes ('..').  Estas dos representaciones se distinguen por la interpretación hecha por PERL de las cadenas de caracteres. Cuando van delimitadas por comillas (".."), toda variable referenciada en el interior de la cadena se evalúa y se reemplaza por su valor.

24 24© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Variables y datos en PERL  Una lista es una colección ordenada de escalares; una variable que almacena una lista se llama array o arreglo.  Un hash, o memoria asociativa, es un mapeo de strings a escalares; los strings se llaman claves y los escalares valores.  Por ejemplo, para definir variables escalares podemos usar:

25 25© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Variables y datos en PERL  Una lista se define listando sus elementos, separados por comas y rodeados por paréntesis donde así sea requerido por la precedencia de los operadores.  Para definir una lista podemos usar: $num=10; $hexa=0x1A; $msg=“Hola Mundo!”

26 26© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Variables y datos en PERL  Los elementos individuales de una lista son accedidos utilizando un índice numérico (que inicia en 0), dentro de corchetes.  Por ejemplo, a $lista[0] le corresponde el 7, a $lista[1] le corresponde el 15, a $lista[2] le corresponde “hola” y a $lista[3] le corresponde “chao”. @lista= (7, 15, “hola”, “chao”);

27 27© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Variables y datos en PERL  En PERL el tipo booleano existe, al igual que en el lenguaje C, de modo implícito, es decir, un número es falso si es igual a cero y verdadero en cualquier otro caso.  Como el cero está asociado a la cadena vacía (""), dicha cadena también equivale al valor falso.

28 28© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Arreglos en PERL  Los arreglos o lista de PERL comienzan con el signo “@“ y contienen una lista de valores escalares (números y/o textos).  Al ser una lista de valores, para acceder a cada de uno estos se utiliza un número que indica su posición dentro de la lista.  La numeración empieza en 0, y se coloca entre corchetes [ ].

29 29© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Arreglos en PERL  A este número que indica la posición de un valor dentro de la lista del arreglo se le denomina índice.  Como se vio anteriormente, para la asignación de un arreglo se usa el caracter “@”, y para acceder a un valor individualmente se utiliza el signo “$”, ya que en definitiva un arreglo está formado por distintas variables escalares.  Veamos un programa PERL que usa arreglos:

30 30© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Arreglos en PERL  Si este programa tiene como nombre “prg1”, para ejecutarlo usaríamos: clear; @A=(7,15,”hola”,”chao”); print $A[1],”\n”; [alumno@localhost ~]$ perl prg1 15 [alumno@localhost ~]$

31 31© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Arreglos en PERL  Asociados a los arreglos, existen algunas funciones en PERL que ayudan a poner o sacar elementos de la lista de datos del arreglo:  push – Colocar nuevos elementos al final de la lista: push(@arreglo, valores).  pop – Sacar el último elemento del arreglo. Se puede asignar a una variable tipo escalar: $variable=pop(@arreglo).

32 32© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Arreglos en PERL  unshift - Reemplazar el primer elemento del arreglo: unshift(@arreglo, valor).  shift - Sacar el primer elemento del arreglo. Se puede asignar a una variable de tipo escalar: $variable=shift(@arreglo).  También se tiene una notación especial para conocer el último índice del arreglo, por medio de $#nombre_arreglo.

33 33© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Arreglos en PERL  Veamos un ejemplo en donde se muestran los efectos de la aplicación de estas funciones sobre un arreglo.  Para efectos de comprensión se han especificado los valores impresos por los print y se han “dibujado” los arreglos y sus contenidos, en la medida que se aplican las funciones sobre él.

34 34© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Arreglos en PERL clear; @A=(7,15,”hola”,”chao”); - - - - - - print $A[1],”\n”;  15 push(@A,10,”Perl”); - - - - - - - - - - print $A[5],”\n”;  Perl print “Último Índice=”,$#A,”\n”;  5 shift (@A); - - - - - - - - - - - - - - - - - print $A[0],”\n”;  15

35 35© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Entrada/Salida en PERL  El print es la instrucción básica para mostrar el valor de las variables en pantalla.  Existen muchos modificadores para la salida de los valores de las variables en pantalla, entre algunos de estos, podemos nombrar: “\n” para nueva línea, “\t” para tabulación, “\r” para retorno de carro, xN para repetir un caracter o texto anterior N veces, etc.  Veamos algunos ejemplos de uso de print:

36 36© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Entrada/Salida en PERL  Para asignar un valor desde el teclado a una variable, se asigna a la variable la representación del teclado, de acuerdo con el siguiente formato: print “hola PERL \n”;  hola PERL print “5x3”;  555 (muestra 3 veces el 5) print “hola”x2;  hola hola $variable= ;

37 37© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Entrada/Salida en PERL  Por ejemplo, veamos un simple programa PERL con E/S:  La función chop se utiliza para eliminar el último caracter de una entrada de datos, normalmente nueva línea. clear; print “Ingrese Nombre: “; $nom= ; print “Nombre=$nom”;

38 38© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Entrada/Salida en PERL  chop(...) elimina el último caracter de una entrada por teclado. Un ejemplo de uso sería: $nom=chop($nom);.

39 39© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Control del flujo en PERL  La mayoría de las estructuras de control en PERL, han sido heredadas del lenguaje C/C++.  La estructura condicional más simple es el IF: if (condición){ sentencias… } else{ sentencias… }

40 40© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Control del flujo en PERL  En la evaluación de las condiciones del IF (y de cualquier sentencia de control del flujo) podemos usar, >=, == y != para comparar números y lt, le, gt, ge, eq y ne para comparar literales.  Veamos un ejemplo de uso de estos operadores:

41 41© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Control del flujo en PERL clear; print “Número: “; $num= ; chop($num); if ($num >= 0){ print $num,” es positivo \n”; } else{ print $num,” es negativo\n”; }

42 42© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Control del flujo en PERL  La sentencia iterativa WHILE presenta el siguiente formato:  Veamos un ejemplo de uso de la sentencia WHILE: while (condición){ sentencias… }

43 43© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Control del flujo en PERL  La sentencia FOREACH se utiliza comúnmente para recorrer los valores de los arreglos o listas. clear; $i=1; while ($i <= 5){ print $i*$i,”\n”; $i=$i + 1; }

44 44© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Control del flujo en PERL  Los elementos del arreglo o lista actúan como contadores del ciclo, ejecutándose el ciclo una vez por cada uno de estos elementos.  La sintaxis para FOREACH es la siguiente: foreach $variable (lista){ sentencias… }

45 45© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Control del flujo en PERL #Llenar arreglo con datos clear; @A=(); while (1){ print “Ingrese dato: “; $dato= ; chop($dato); push(@A,$dato); print “Más datos [Si/No]: “; $opc= ; if ( chop($opc) eq “No”){ last; }

46 46© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Control del flujo en PERL #Listar los datos del arreglo clear; print “Listado de datos \n\n”; foreach $a (@A){ print $a,”\n”; } #Mostrar cantidad de datos print “Cantidad de datos=“,$#A+1,”\n”;

47 47© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Control del flujo en PERL #Sumar los datos del arreglo clear; $sum=0; foreach $a (@A){ $sum = $sum + $a; } print “Suma=“,$sum,”\n”;

48 48© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Desarrollo Control del flujo en PERL  Veamos un ejemplo de uso de la sentencia FOREACH:  Veamos un ejemplo de uso de estas sentencias de control del flujo: clear; @A=(1,7,”Hola”,10); foreach $a (@A){ print $a,”\n”; }

49 49© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Resumen  Resumen de la clase  Ciertamente que AWK puede no ser tan potente como numerosas herramientas que se pueden usar con la misma finalidad. Pero tiene la enorme ventaja de que, en un tiempo realmente corto, permite escribir programas que, aunque tal vez sean de un solo uso, están totalmente adaptados a nuestras necesidades, que en muchas ocasiones son sumamente sencillas.  AWK es ideal para los propósitos con los que se diseño: leer archivos línea por línea y procesar en base a los patrones y cadenas que encuentre en ellas.  Archivos del sistema como el /etc/password y muchos otros, resultan sumamente fáciles de tratar mediante el AWK, sin recurrir a nada más.  Y desde luego que AWK no es el mejor. Hay varios lenguajes de scripting con capacidades mucho mayores. Pero AWK sigue teniendo la ventaja de ser siempre accesible en cualquier instalación, por mínima que esta sea.

50 50© 2007 Cisco Systems, Inc. Todos los derechos reservados.Cisco Public Escuela de Informática y Telecomunicaciones Resumen  Resumen de la clase  Algunas de las ventajas del uso del lenguaje PERL son las siguientes:  Construcción de pequeños programas que pueden ser usados como filtros para obtener información de archivos, realizar búsquedas, etc.  Se puede utilizar en varios entornos, como puede ser Windows 95, OS/2, obviamente UNIX y LINUX..., sin realizar cambios de código, siendo únicamente necesario la introducción del interprete PERL correspondiente a cada sistema operativo.  También es uno de los lenguajes mas utilizados en la programación de CGI scripts, que son guiones o scripts que utilizan el interface CGI (Common Gateway Interface), para intercambio de información.  El mantenimiento y depuración de un programa en PERL es mucho más sencillo que la de cualquier programa en C.


Descargar ppt "2008 Escuela de Informática y Telecomunicaciones, DuocUC Escuela de Informática y Telecomunicaciones Clase 12: Introducción a AWK Nombre unidad de aprendizaje:"

Presentaciones similares


Anuncios Google