AWK Formato Ejemplos

Anuncio
Seminario sobre awk
1
AWK
Procesa y manipula información en ficheros:
* Busca la ocurencia de patrones de caracteres en ficheros.
* Ejecuta una(s) acción(es) en las lı́neas en las que (no) se
encuentra el patrón dado.
* No altera el fichero de entrada
* Trabaja con campos y registros
p Campo ≈ Palabra
p Registro ≈ Lı́nea
Ambos conceptos modificables
Félix Sánchez
C.I.C.A.
Seminario sobre awk
2
Formato
. awk [-Fc][ -f fichero.com] [fichero.datos]
. awk [-Fc] ‘/patrón/{acción}‘ [fichero.datos]
Ejemplos
awk -F% ‘/resultados/{print $4}’ salida.dat
awk ‘{print $2}‘ salida.dat
ls -ls | awk ‘{print $4 $5}‘
Félix Sánchez
C.I.C.A.
Seminario sobre awk
3
Caracteres especiales en el patrón
Exp.
Significado
Ejemplo
C
Identifica el caracter C,
siempre que C no sea
caracter especial.
/A/ Selecciona todas la
lı́neas conteniendo una
A mayúscula.
\C
Identifica el caracter C,
incluso siendo C un caracter especial
/\\/ Identifica lı́neas con
\.
\oct
Cuando oct es un
número octal de tres
dı́gitos, identifica el
caracter (byte) que tiene
ese valor.
/\011/ identifica el caracter tabular.
Félix Sánchez
C.I.C.A.
Seminario sobre awk
4
ˆ
Identifica el principio de
una lı́nea, o cadena.
/ˆpe/
Selecciona
las
cadenas persona, pena,
pero no tope
$
Identifica final de lı́nea o
cadena.
/pe$/ Ahora sólo cogerı́a
tope
[lst] Identifica
cualquier
caracter en en lst.Se
pueden usar rangos de
letras del tipo g-m, para
indicar cualquier letra
entre esas dos.
/[a-zA-Z]/
Identifica
cadenas que contengan
algún caracter alfabético, mayúsculas, o no.
[ˆls] Identifica cualquier caracter no incluido en la
lista ls.
/[ˆ0123456789]/ Da todas las lı́neas que no
contengan números.
Félix Sánchez
C.I.C.A.
Seminario sobre awk
5
|
Contempla más de un
solo caso
/(a|b)c/
Selecciona
ocurrencias de ac, bc y
tt abc.
.
Identifica cualquier caracter simple.
/x.y/ tomará las lı́neas
que contengan xny,
xcy etc.
?
Identifica cero o más caracteres.
/fi?e/ tomará lı́neas que
tengan fie, filete,
fiese
Félix Sánchez
C.I.C.A.
Seminario sobre awk
6
Expresiones lógicas de búsqueda
Expresión
Significado
patron1 || patron2
Válida si se verifica patrón1,
patrón2, o ambos patrones.
patron1 && patron2
Válida solo si se verifican ambos patrones.
!patron
Identifica todas las cadenas
que no coincidan con el patrón.
var ˜ patron
Válida solo si el patrón encaja
con el valor d e la variable var.
Félix Sánchez
C.I.C.A.
Seminario sobre awk
7
Expresiones lógicas de búsqueda (cont.)
var !˜ patron
Válida solo si el patrón no encaja con el valor de la variable
var.
> < <= >= != ==
Se usan para verificar expresiones mayor-que, menor-que,
menor-o-igual-que,
mayoro-igual-que, distinto-de, o,
igual-a, respectivamente.
Félix Sánchez
C.I.C.A.
Seminario sobre awk
8
Variables predefinidas
$0
Todo
el
registro
de
awk ’{print $0}’ fich_dat
$1
El primer campo del registro de entrada.
awk ’{print $1}’ fich_dat
$n
El nsimo campo del registro
awk ’{print $5}’ fich_dat
NR
Número del registro actual, se empieza por 1.
awk ’{print NR}’ fich_dat
NF
Número de campos en el registro actual, el primer
campo es el 1. awk ’{print NF}’ fich_dat
FS
Separador
de
campos
de
la
entrada.
awk ’{FS=":"}{print $1}’ fich_dat
Félix Sánchez
entrada.
de
entrada.
C.I.C.A.
Seminario sobre awk
9
RS
Separador de registros de la entrada.
awk ’{RS=")" ; print $2}’ fich_dat
OFS
Separador de campos de la salida.
awk ’{ OFS="." ; print $1,$2}’ fi
ORS
Separador de registros de la salida.
awk ’{ORS=":" ; print $0}’ fich_d
OFMT
Formato
de
salida
para
números.
Por
defecto,
es
%.6g
awk ’{OFMT="%.5g" ; print $2}’ f_d
len
La
longitud
del
registro
actual.
awk ’{print length($0)}’ fich_dat
Fnam
El nombre del fichero de entrada.
awk ’{print FILENAME}’ fich_dat
Félix Sánchez
C.I.C.A.
Seminario sobre awk
10
Operadores Matemáticos
Operador
Significado
++ --
Incremento
unidades.
* / %
Multiplica, divide, y resto.
+ -
Suma y resta.
> <
Comparadores: mayor que, menor
que. igual.
<= >=
menor o igual que, mayor o igual que.
!= ==
Distinto de, igual a.
Félix Sánchez
o
decremento
en
C.I.C.A.
Seminario sobre awk
11
Funciones Matemáticas
Funciones
Significado
cos(expr)
Coseno de expr.
exp(expr)
Función exponencial (e elevado a la potencia expr).
int(expr)
Parte entera de .
log(expr)
Función logarı́tmica de.
sin(expr)
Seno de.
sqrt(expr)
Raiz cuadrada de.
Ejemplos:
sin($5)
awk ’{pepe=sin($5)}{print pepe}’
sqrt($5/NR)
awk ’{pp=sqrt($5/NR)}{print pp}’
Félix Sánchez
C.I.C.A.
Seminario sobre awk
12
Reglas para crear ficheros de
comandos awk
* Sintaxis libre como en lenguaje C.
* Varias acciones en la misma lı́nea se separan con ”;”.
* Una acción escrita en más de una lı́nea, se continúa con \.
* Admite lı́neas de comentarios con el caracter #.
* Las cadenas de caracteres se usan encerradas por ”.
* Se puede alterar el concepto de campo y registro.
Félix Sánchez
C.I.C.A.
Seminario sobre awk
13
Reglas(cont.)
* Funciones definidas por el usuario, para uso posterior
reiterado:
function max(m,n){return m > n ? m : n}
PEPE=max(VAR,$6)
* Llamadas a comandos del sistema operativo mediante la
función interna system
system("who")
* Estructuras de control de flujo: if, while. . .
Félix Sánchez
C.I.C.A.
Seminario sobre awk
14
Reglas(cont.)
* Patrones especiales BEGIN y END que nos permiten ejecutar
algunas acciones previas (o posteriores) al procesado del
fichero.
* Patrones formados por expresiones $3 < 100.
* Patrones de identidad /Asia/.
* Patrones compuestos
$3 < 100 && $4 == "Asia".
* Patrones formados por un rango de lı́neas:
NR == 10, NR == 20
Félix Sánchez
C.I.C.A.
Seminario sobre awk
15
Algunas operaciones con cadenas
Operad. o Func.
Significado
cad1 cad2
Concatenación de cad1 con cad2.
getline
Lee el próximo registro, devuelve 0 si
encuentra fin de fichero, 1 si no.
index(cad1,ca2) Devuelve el ı́ndice de la cadena cad1
dentro de ca2, devuelve cero en caso de que ca2 no esté contenida en
cad1.
length(cad)
Devuelve el número de caracteres de
cad.
print[arg]
Copia las cadenas pasadas como arg
a la salida estandar, copia todo el registro si arg no aparece.
Félix Sánchez
C.I.C.A.
Seminario sobre awk
16
Operaciones con cadenas(cont.)
printf "fmt", arg Copia las cadenas arg con formato dado como fmt (equivale a la
función de C printf).
split(cad,arr,c)
Divide la cadena cad en arr[1],
arr[2],...,arr[n], para cada ocurrencia del caracter c.
sprints(fmt,args) Formatea las cadenas args con el
formato fmt y devuelve el resultado.
substr(str,ind,l) Devuelve la sub-cadena de str
que empiece en el caracter
número ind, con logitud l.
Félix Sánchez
C.I.C.A.
Seminario sobre awk
17
Estructuras de control de flujo
for(expr1;condición;expr2)
{ accion(es) }
Ejecuta la expresión expr1
una vez. Hasta que la condición sea falsa sigue ejecutando la expresión expr2 y
la accion(es).
{ for( i=1; 1 <= NF; i++) print $1 }
for(i in array)
{ accion(es) }
Ejecuta la accion(es)
mientras i esté contenido
en el array
{ for(i in conjunto) {print i, conjunto[i]} }
Félix Sánchez
C.I.C.A.
Seminario sobre awk
18
if(expr) {accion(es)}
if evalua la expresión expr,
y si no es falsa, ejecuta las
acciones accion(es)
{ if (TOPE < $3) {TOPE = $3 ; dato = $1 }}
else{ accion(es) }
{ if ($1 <=
Es continuación de if, si es
falsa la condición de aquél
ejecuta accion(es)
$3) {valor = valor * $1;
else {valor = 1 ; print $1}}
while (expr)
{ accion(es)}
Ejecuta la accion(es)
mientrasla expresión expr
sea verdad.
{ i = 1 ; while (i <= NF){ print $1 ; ++i} }
Félix Sánchez
C.I.C.A.
Seminario sobre awk
19
Ejemplos
# cadena "x" contiene una lista de vocales.
BEGIN { x = "a e i o u"
split(x, vocal) }
# Ahora, "vocal" contiene el contador de vocales
{ for ( i=1 ; i <= length($0) ; i ++ )
if ( $i == "a") vocal["a"]++
if ( $i == "e") vocal["e"]++
if ( $i == "i") vocal["i"]++
if ( $i == "o") vocal["o"]++
if ( $i == "u") vocal["u"]++ }
{ punto[NR] = index( $0 , "." ) }
{print vocal["a"], vocal["e"], vocal["i"],
vocal["o"], vocal["u"], punto[NR]}
Félix Sánchez
C.I.C.A.
Seminario sobre awk
20
Ejemplos(cont.)
Procedimiento de comandos del shell que usa varios awk para
filtrar la salida de comandos:
w | sed -e ’1d’| awk ’{printf \
"%12s %6s\n",$1,$4}’ > TEMP1
awk ’{FS = ":"; if ( $2 != "") \
{print $1}}’ TEMP1 > TEMP2
awk ’{ORS = "|" ; print $1}’ TEMP2 > TEMP3
echo "ps -axu|egrep ’.("‘cat TEMP3‘")’" \
> TEMP4
sed -e ’s/|)/)/’ TEMP4 > TEMP5
csh TEMP5|awk ’{printf \
"%10s %8s %4s %30s\n", \
$1,$2,$8,$10 $11 $12}’
Félix Sánchez
C.I.C.A.
Descargar