Escuela Superior de Informática (Ciudad Real) · UCLM Administración de Sistemas Operativos Utilidad awk – Introducción I Desarrolladores de awk Alfred V. Aho, Peter J. Weinberg, Brian W. Kerningan Objetivo inicial Utilidad para desarrollar pequeños programas Potenciar la funcionalidad proporcionada por grep ¿Qué es? Capaz de procesar un archivo con datos organizados en campos (o columnas) y generar nuevos campos con los valores resultantes de realizar ciertos cálculos y operaciones Incorpora su propio lenguaje de programación Lenguaje de búsqueda y procesamiento de patrones Ramón Manjavacas Ortiz ([email protected]) Transp. 43 Escuela Superior de Informática (Ciudad Real) · UCLM Administración de Sistemas Operativos Utilidad awk – Introducción II Posibilidades de la versión de 1985 Expresiones regulares dinámicas con sustitución de texto Funciones y variables intrínsecas Funciones de usuario Operadores Múltiples Acceso y sentencias archivos de entrada a argumentos de la línea de comandos Tratamiento de errores Ramón Manjavacas Ortiz ([email protected]) Transp. 44 Escuela Superior de Informática (Ciudad Real) · UCLM Administración de Sistemas Operativos Utilidad awk – Modelo de programación Modelo general awk programa archivos awk ‘patrón’ {acción} archivos Sintaxis awk [-f arch_prog] [-Fc] [‘programa’] [var=valor ...][archivo[,archivo]] Ramón Manjavacas Ortiz ([email protected]) Transp. 45 Escuela Superior de Informática (Ciudad Real) · UCLM Administración de Sistemas Operativos Utilidad awk – Campos y variables Características Una línea de entrada (registro) se considera dividido en campos separados por espacios A cada campo se accede mediante $1, $2, ... $0 hace referencia a la línea completa (o registro) No es necesario declarar las variables Se pueden manipular las variables awk El ‘{$1=$2+$3; print $0}’ archivo tratamiento como texto o numérico dependerá del contexto X=10 Ramón Manjavacas Ortiz ([email protected]) X=“Hola” X=“2”+”3” Transp. 46 Escuela Superior de Informática (Ciudad Real) · UCLM Administración de Sistemas Operativos Utilidad awk – Variables predefinidas Se pueden utilizar en el programa Relación: FS: Separador de campos RS: Separador de registros OFS: Separador de campos de salida ORS: Separador de registros de salida NF: Número de campos del registro actual NR: Número de regs. procesados hasta le momento RSTART: Pos. de la cadena que verifica el patrón RLENGTH: Lon. de la cadena que ..... SUBSEP: Separador de cadenas en arrays Ramón Manjavacas Ortiz ([email protected]) Transp. 47 Escuela Superior de Informática (Ciudad Real) · UCLM Administración de Sistemas Operativos Utilidad awk – Variables predefinidas II Separadores Por defecto •Separador de campo: espacio •Separador de registros: nueva-línea Los valores de las variables relativas a separadores se pueden modificar en cualquier momento Ramón Manjavacas Ortiz ([email protected]) Transp. 48 Escuela Superior de Informática (Ciudad Real) · UCLM Administración de Sistemas Operativos Utilidad awk – Operadores Aritméticos +, -, *, /, %, ( ), ++, -- Asignación =, +=, -=, *=, /=, %= Relacionales >, >=, <, <=, ==, != Lógicos &&, | |, ! Ramón Manjavacas Ortiz ([email protected]) Transp. 49 Escuela Superior de Informática (Ciudad Real) · UCLM Administración de Sistemas Operativos Utilidad awk – Formato de las sentencias I patrón {acción [;acción ...]} Aclaraciones Los patrones deben ir acotados por caracteres “/” Si no se especifica la acción se presentan las líneas que verifican/contienen el patrón La acción puede estar formada por sentencias •if, for, print, next, ...... Ramón Manjavacas Ortiz ([email protected]) Transp. 50 Escuela Superior de Informática (Ciudad Real) · UCLM Administración de Sistemas Operativos Utilidad awk – Formato de las sentencias II Patrones Pueden aparecer dos patrones separados por comas •La acción se realiza sobre aquellas líneas comprendidas entre la primera aparición del patrón y la primera del segundo /start/, /stop/ ⇒ líneas entre start y stop Con el símbolo “~” •Indica que el patrón de la derecha está contenido en el campo de la izquierda $2 ~/prueba/ ⇒ líneas cuyo segundo campo contenga prueba Con “!~” •Indica que no debe estar contenido $1 !~/prueba/ ⇒ líneas cuyo primer campo contenga prueba Ramón Manjavacas Ortiz ([email protected]) Transp. 51 Escuela Superior de Informática (Ciudad Real) · UCLM Administración de Sistemas Operativos Utilidad awk – Formato de las sentencias III Acciones no asociadas a patrones Estructura especial de un programa awk •BEGIN: se ejecuta antes de leer cualquier entrada •END: se ejecuta una vez tratadas todas las entradas BEGIN {acción} patrón {acción} END {acción} Ramón Manjavacas Ortiz ([email protected]) Transp. 52 Escuela Superior de Informática (Ciudad Real) · UCLM Administración de Sistemas Operativos Utilidad awk – Sentencias I IF – – – – – if ( expresiónBooleana ) { Sentencia-1 } else { sentencia-2 } WHILE while ( expBooleana ) { Sentencia-1 } Ramón Manjavacas Ortiz ([email protected]) IF if ( expresiónBooleana ) { Sentencia-1 } FOR for ( exp1; expBooleana; exp2 ) { Sentencia-1 } Transp. 53 Escuela Superior de Informática (Ciudad Real) · UCLM Administración de Sistemas Operativos Utilidad awk – Sentencias II Ramón Manjavacas Ortiz ([email protected]) Transp. 54 Escuela Superior de Informática (Ciudad Real) · UCLM Administración de Sistemas Operativos Utilidad awk – Sentencias III Ramón Manjavacas Ortiz ([email protected]) Transp. 55 Escuela Superior de Informática (Ciudad Real) · UCLM Otras sentencias Administración de Sistemas Operativos Utilidad awk – Sentencias IV for ( var in array) sentencia do sentencia while (expresión) break continue var = valor print [lista_expresiones] printf formato [, lista_expresiones] return [expresión] next delete array [expresión] exit [expresión] Ramón Manjavacas Ortiz ([email protected]) Transp. 56 Escuela Superior de Informática (Ciudad Real) · UCLM Administración de Sistemas Operativos Utilidad awk – Funciones Incorporadas I length(x) •Devuelve la longitud del argumento sqrt(x) •Devuelve la raíz cuadrada del argumento log(x) •Devuelve el logaritmo en neperiano del argumento (en base e) exp(x) •Devuelve el valor de e elevado al argumento int(x) •Devuelve la parte entera del argumento cos(x) •Devuelve el coseno del argumento sin(x) •Devuelve el seno del argumento Ramón Manjavacas Ortiz ([email protected]) Transp. 57 Escuela Superior de Informática (Ciudad Real) · UCLM Administración de Sistemas Operativos Utilidad awk – Funciones Incorporadas II atan(x) •Devuelve el arcotangente del argumento rand() •Devuelve un número aleatorio comprendido entre 0 y 1 match(s,r) •Devuelve la posición de s en donde ocurre r, comenzando desde 1. Si no existe devuelve 0. substr(s,m,n) •Devuelve la subcadena de s que comienza en la posición m y finaliza en la n. sub(r,t,s) •Sustituye t por la primera ocurrencia de r en la cadena s. Si no se especifica s se tomará todo el registro ($0). g(sub(r,t,s) •Igual que sub, pero sustituyendo todas las ocurrencias. Ramón Manjavacas Ortiz ([email protected]) Transp. 58 Escuela Superior de Informática (Ciudad Real) · UCLM Administración de Sistemas Operativos Utilidad awk – Funciones Incorporadas III split(s,array,sep) •Divide la cadena s en array[1],...,array[n]. Se devuelve el número de elementos. Si no se especifica el separador en sep se utilizará el valor de FS. s puede ser una variable. index(s1,s2) •Devuelve la posición de la cadena s1 en donde se encuentra la cadena s2. En caso de no encontrarse se devuelve 0. sprintf(f,e1,e2,...) •Devuelve la cadena resultante de imprimir los valores e1, e2, ... con el formato especificado en f. toupper(s) •Devuelve la cadena s convertida a mayúsculas. tolower(s) •Devuelve la cadena s convertida a minúsculas. Ramón Manjavacas Ortiz ([email protected]) Transp. 59 Escuela Superior de Informática (Ciudad Real) · UCLM Administración de Sistemas Operativos Utilidad awk – printf Ramón Manjavacas Ortiz ([email protected]) Transp. 60 Escuela Superior de Informática (Ciudad Real) · UCLM Administración de Sistemas Operativos Utilidad awk – printf Ramón Manjavacas Ortiz ([email protected]) Transp. 61 Escuela Superior de Informática (Ciudad Real) · UCLM Administración de Sistemas Operativos Utilidad awk – Funiones de Usuario Sintaxis function nombre (p1, p2, p3) { .... return x } Paso de parámetros •Escalares ⇒ por valor •Arrays / Vectores ⇒ por referencia Ramón Manjavacas Ortiz ([email protected]) Transp. 62 Escuela Superior de Informática (Ciudad Real) · UCLM Administración de Sistemas Operativos Utilidad awk – Ejemplo I Crear un archivo de texto separando cada campo con espacio en blanco o tabulador 1. Pen 5 20.00 2. Pencil 10 2.00 3. Rubber 3 3.50 4. Cock inven 2 45.50 $ awk '{ print $1 $2 "--> Rs." $3 * $4 }' inven $ awk '{ print $2 }' inven $awk '{ print $2 $4}' inven $ awk '{ print $0 }' inven $ cat > prn_pen /Pen/ { print $3 } $ awk -f prn_pen inven Ramón Manjavacas Ortiz ([email protected]) Transp. 63 Escuela Superior de Informática (Ciudad Real) · UCLM Administración de Sistemas Operativos Utilidad awk – Ejemplo II alta:luis:201:200:c baja:pepe:100:220:perl baja:maria:120:200:c alta:carlos:301:300:java datos awk -F: '/alta/ {print $2":",$3":",$4":",$5}' datos | tr -s " " : > altas awk -F: '/baja/ {print $2":",$3":",$4":",$5}' datos | tr -s " " : > bajas Ramón Manjavacas Ortiz ([email protected]) Transp. 64 Escuela Superior de Informática (Ciudad Real) · UCLM Administración de Sistemas Operativos Utilidad awk – Ejemplo III awk '\cadena\ { cont=cont+$2 ; print $2 "\t" cont }' cont=0 archivo Busca cadena en archivo. En una variable cont va sumando los valores del campo 2 y muestra dicho campo, un tabulador y el valor de cont. Al final mostrará la suma total de los valores que ha tenido cadena en el campo 2. awk '$2>0 {print $1," ", $2}' archivo Para cada línea de archivo, si el 2º campo es positivo, muestra los dos primeros campos. awk '$2>0 {printf "%s %d\n", $1, $2}' archivo Idem que el caso anterior, suponiendo que el primer campo es una cadena de caracteres Ramón Manjavacas Ortiz ([email protected]) Transp. 65