Manual Awk
Manual Awk
Manual Awk
Expresiones regulares
Herramientas Grep y AWK
En este tema se introducen las expresiones regulares y un par de utilidades que las usan
de manera intensiva: 'grep' y 'awk'. Estas utilidades proceden del mundo UNIX, y estn
disponibles hoy da en todas las plataformas usadas habitualmente.
Grep: Su nombre se toma de la expresin "Globally search for Regular Expression
and Print", que describe una de las funciones disponibles en el editor "ed" de UNIX.
Dicha funcin aparece documentada en el manual como g/re/ p. La funcin
principal de la utilidad "grep" es extraer de un fichero de texto las lneas que cumplen
con un patrn dado por una expresin regular.
AWK: Su nombre se obtiene de las iniciales de los apellidos de sus autores: Alfred
Aho, Peter Weinberger y Brian Kernighan. El nombre se aplica a un lenguaje de
script (AWK) y al procesador que lo interpreta (awk). Est orientado al proceso de
ficheros de texto que contienen uno o varios campos de datos en cada lnea. Usa
expresiones regulares para seleccionar las lneas de texto deseadas, y las acciones a
realizar se escriben como en lenguaje C.
1. Expresiones regulares
Las expresiones regulares permiten describir estructuras sintcticas, en particular las de
los lenguajes regulares. Son, por tanto, patrones sintcticos a los que deben ajustarse los
elementos que componen el vocabulario del lenguaje.
Dicho de una manera ms sencilla, las expresiones regulares son patrones que permiten
reconocer secuencias de smbolos con una estructura sintctica determinada.
Hay diversas notaciones para representar expresiones regulares. Por ejemplo, la notacin
BNF y otras derivadas de ella. Los comodines (wildcards) usados para designar conjuntos
de ficheros vienen a ser una forma restringida de rexpresiones regulares.
La notacin que se describe aqu permite escribir patrones para secuencias de caracteres
(strings), y corresponde a la que con ligeras variantes se usa en diversas utilidades para
proceso de textos: "grep", "awk", "perl", la librera "regexp", etc. Los apartados siguientes
describen los elementos principales. Para una descripcin ms completa se debe consultar
el manual de referencia correspondiente.
Significado
cualquier carcter
[aeiou]
[^aeiou0-9]
complementa el conjunto
\x
\<
\>
Significado
xy
expresin x seguida de y
x+
una o ms repeticiones de x
x*
cero o ms repeticiones de x
x?
una|otra
(x)
expresin x
2. Herramienta Grep
Es un programa de utilidad que permite seleccionar las lneas de un texto que cumplen con
un patrn determinado. La orden para invocarla es:
> grep patrn ficheros...
El patrn se escribe como una expresin regular. Los nombres de los ficheros de entrada
pueden incluir comodines. El programa lee los ficheros y copia a la salida cada lnea que
se ajuste al patrn.
La utilidad grep procede de UNIX. Dispone de parmetros opcionales para controlar su
funcionamiento. Para conocer las posibles opciones se puede invocar como:
> grep --help
> grep -h
> grep
Ejemplo: extraer todas las lneas de cdigo C/C++ que empiecen con un comentario (// o
/*) desde la primera posicin.
> grep ^/[/\*] *.h *.c *.cpp
3. Lenguaje AWK
AWK es un lenguaje para procesar ficheros de texto, lnea a lnea. Resulta apropiado para
extraer datos individuales, realizar recuentos, modificar el formato de los datos, generar
resmenes, etc. La potencia del lenguaje reside en el uso extensivo de expresiones
regulares para seleccionar los fragmentos de informacin apropiados, y la posibilidad de
combinar los estilos de programacin declarativo e imperativo.
En realidad existen distintas variantes de AWK, dependiendo del procesador utilizado:
awk - lenguaje original
awk - POSIX
nawk - AWK renovado
gawk - AWK de GNU
mawk - Mike's AWK
tawk - AWK de Thompson Automation
...etc. ...
En los ejemplos se usar gawk.
4.3
8
7.5
3
9.5
6
5.5
8.7
6
2
3
11
3.3 Patrones
En AWK hay varias clases de patrones. Todos ellos funcionan como condiciones con un
resultado booleano.
Expresiones regulares. Se escriben como /expresin/, entre barras. La condicin
se cumple si la lnea de datos de entrada se ajusta a esa expresin regular.
Expresiones aritmticas (o de texto). Se escriben prcticamente igual que en lenguaje
C. La condicin se cumple si el resultado de evaluar la expresin es un valor de texto
no nulo o un valor numrico distinto de cero.
Patrones especiales. Algunos de ellos son:
o
3.4 Operadores
Como se ha dicho, son similares a los del lenguaje C. Los ms importantes son:
Operadores aritmticos: + - * / % ^
Operadores de comparacin: == != > >= < <=
Operadores de asignacin: = += -= *= /=
Operadores de incremento o decremento, en sus formas prefija y postfija: ++ - Operadores lgicos: ! && ||
Operador de ajuste de patrn: ~
La operacin de concatenacin usa un operador implcito: "uno" "dos"
"unodos"
Tambin existe la expresin condicional: x ? y : z
Los valores numricos y de texto son convertidos automticamente de un tipo a otro cuando
sea necesario. Cuando se quiera forzar una conversin se puede escribir:
x + 0 valor de x convertido a tipo numrico
x "" valor de x convertido a texto
3.9 Acciones
Las acciones son sentencias o secuencias de sentencias que se escriben como en lenguaje
C. El cdigo de una sentencia termina implcitamente con el fin de lnea o explcitamente
con punto y coma (;). Algunas sentencias de uso frecuente son:
Sentencia
Significado
var = expresin
expresin
if (condicin) accin
accin condicional
acciones alternativas
bucle WHILE
accin compuesta
equivale a print $0
close( fichero )
libera el fichero
next
exit
aux1, aux2 )
El primer caso slo es til para programas muy cortos. El texto del programa se escribe
literalmente, entre comillas, en la propia orden, antes de los nombres de los ficheros de
entrada. En el segundo caso el programa se almacena en un fichero de texto y el nombre
de dicho fichero se indica con la opcin -f. La orden puede incluir tambin una asignacin
de valores iniciales a ciertas variables del programa, con la opcin -v:
> gawk
"/^[0-9]/" *.txt
Esta orden imprime (accin por defecto) cada lnea que empiece (^) por un carcter
numrico (0-9) en cualquier fichero de texto (*.txt) que haya en el directorio actual.
El nombre de la orden debe corresponderse con el intrprete concreto que se utilice. Hay
distintos intrpretes para distintas variantes de AWK: awk, nawk, mawk, gawk, tawk, etc.