Utilidad awk - Escuela Superior de Informática

Anuncio
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
Descargar