<!doctype linuxdoc system>

<article>

<title>Curso de AWK
<author>Rodolfo Pilas
<tt><htmlurl url="mailto:rodolfo@linux.org.uy" name="rodolfo@linux.org.uy"></tt>
&nl;
Dictado por Heber Godoy <tt><htmlurl url="mailto:hgv@chasque.apc.org"
name="hgv@chasque.apc.org"></tt>

<date>v0.2 - 6 Diciembre 1997

<abstract>
Este es el resumen del curso de AWK dictado por Heber Godoy sobre el 
lenguaje AWK.  La informacion contenida en este documento son los apuntes
tomados por el autor (Rodolfo Pilas) durante dicho curso.

Para volver a la pagina de CURSOS <htmlurl url=".." name="haga click aqui">
</abstract>

<toc>

<sect>Derechos y descargos
<p>
&copy; 1997 Rodolfo Pilas (<tt><htmlurl url="mailto:rodolfo@linux.org.uy"
name="rodolfo@linux.org.uy"></tt>)

Salvo que exista aclaracion en contrario, este documento es 
propiedad de su respectivo autor. Este documento
puede ser reproducido o distribuido en su
totalidad o en parte, en cualquier medio fisico o electronico,
siendo estas declaraciones de derechos aplicables a todas las
copias.  

Se deja especial constancia que este documento <bf>NO ES</bf> un documento
que pueda por si solo ser un elemento de ensenanza de su contenido. El 
contenio del mismo son solamente los apuntes tomados por su autor durante
el curso en cuestion. No es intencion del autor ni de esta documentacion 
permitir el aprendizaje del tema tratado, simplemente es una guia auxiliar al curso
correspondiente.

El objetivo principal de este documento es ser una ayuda para las personas
que asistieron al curso.  Si Ud. no ha asistido al curso, dudo mucho
que la informacion contenida le sea de utilidad.

En ningun aspecto este documento representa la opinion del UYLUG ni de la 
persona que ha dictado el curso.  

Dada la informalidad que reviste esta documentacion la misma puede estar
plagada de faltas de ortografia, siendo que ademas carece de caracteres acentuados.

En cuanto a los posibles errores de concepto, como autor, agradezco me informen
por correo electronico, para poder corregirlos.

<sect>Introduccion
<p>
El lenguaje AWK es una herramienta con las que se cuenta en el lenguaje 
Unix.

Si tomamos la interfase como varios circulos tenemos entre el interior y
el usuario las siguientes capas

<code>
      kernel -> syste calls -> shell                  -> usuarios
                               herramientas
</code>

<sect>Invocando AWK
<p>
<tscreen><verb>
awk [-Fc] [programa] [parametros] [archivos] [-f archivo programa]
</verb></tscreen>

si se esscribe en linea de comandos el [programa] va entre apostrofes
(comillas) para protegerlo del shell en el que se ejecuta

si lo paso por programa es 

<tscreen><verb>
-f archivo_programa
</verb></tscreen>

<sect1>Forma generica del programa awk
<p>
forma generica:

<tscreen><verb>
patrones {acciones}
</verb></tscreen>

si no esta presente archivo actua para analizar patrones sobre la entrada
estandard.

<descrip>
<tag>patrones</tag>espresiones logicas o regulares
<tag>acciones</tag>lenguaje especial
</descrip>

<sect>Estructura del patron
<p>
<sect1>BEGIN
<p>
Acciones que se ejecutan antes del programa, por ejemplo, para definir variables

<code>
	BEGIN {TOTAL=7
		TOTAL1=8}
</code>

<sect1>END
<p>
Acciones que se ejecutan luego del programa. Se usa el mismo formato que
para BEGIN

<sect1>Notas varias
<p>
Las acciones finalizan con ; } o fin de linea

Separador de registros \n

Separador de campos espacio 1 o mas

los campos se invocan en la siguiente forma

   &dollar;1 &dollar;2... &dollar;n
   &dollar;0 toda la linea

Si se omite patron, entonces la accion se ejecuta sobre todo el archivo

Si se omite accion, entonces se imprime toda la linea

<sect1>Variables fijas
<p>

<descrip>
<tag>NR</tag>Numero de registro en el cual se encuentra. Si se esta en el ultimo registro es el total de registros
<tag>FS</tag>Separador de campos (por defecto es espacio en blanco)
<tag>RS</tag>Separador de registro (por defecto \n)
<tag>OFS</tag>Separador de campos para la salida (por defecto SIN separador)
<tag>NF</tag>Numero de Campo
</descrip>

<sect1>Variables generales
<p>
Las variables no hay necesidad de declararlas, cuando se abren se inician
automaticamente

<sect>ACCIONES (instrucciones)
<p>
<sect1>Notas varias
<p>
<sect2>Formato general
<p>
<code>
{instruccion [instrucciones]}
           Las llaves permiten colocar instrucciones una atras de
	   otras como si fueran una sola instruccion
</code>

<sect2>Variables
<p>
Las variables solamente se declaran y toman el valor correspondiente

VAR =exp

VAR 0=exp

<sect1>if
<p>
if (condicion) instruccion [else instruccion2]

<sect1>while
<p>
while (condicion)   

<sect1>for
<p>
<tscreen>
<verb>
for (expresion de inicializacion ; condicion ; expresion de incremento) instruccion
</verb>
</tscreen>

<descrip>
<tag>espresion de inicializadion</tag>cualquier cosa que sea asignacion
<tag>condicion</tag>expresion logica
<tag>espresion de incremento</tag>cualquier cosa que increente la variable 
de control
</descrip>

tambien puede ser:

<verb>
    for (expresion de inicializacion ; condicion )
 	{instruccion
	   expresion de incremento}
</verb>

<sect1>break
<p>
Se usa para salir del ciclo y ponerse en la instruccion siguiente

<sect1>continue
<p>
vuelve al principio del ciclo (ignorando lo que quede por cumplir 
de ese ciclo)

<sect1>print
<p>
<tscreen>
<verb>
print [lista de expesiones] [&gt; expresion]
</verb>
</tscreen>

<descrip>
<tag>lista de expresiones</tag>nombre de variables o entre comillas
el texto que queremos que se imprima
<tag> &gt expresion</tag>direccionamiento a un archivo [&gt;&gt; adicionar]
</descrip>

<sect1>printf
<p>
La sintaxis es como C

<tscreen>
<verb>
printf(formato, lista de expresiones, ... [&gt;expresion])
</verb>
</tscreen>

<sect1>next
<p>
saltea los patrones restantes 

<sect1>exit
<p>
sale de todo el programa de ese archivo

<sect1>sprintf
<p>
igual a printf pero escribe en la variable de tipo string

<sect1>log
<p>
devuelve logaritmo decimal de lo que sigue

<sect1>sqrt
<p>
calcula la raiz cuadrada de lo que sigue

<sect1>exp
<p>
calcula la potencia 

<sect1>length
<p>
devuelve un numero de la cantidad de caracteres de la linea en la que me encuentro

<sect1>int
<p>
devuelve la parte entera por defecto de un numero real o racional

<sect1>substr(s,m,n)
<p>
devuelve sub cadena de <bf>s</bf> sacada desde <bf>m</bf> hasta <bf>n</bf>

<sect>Apuntes varios
<p>
logico:

<quote>
|| - o&nl;
&amp;&amp; - y&nl;
! - no
</quote>

<sect>Archivos relacionados
<p>
<sect1>Programas ejemplos
<p>
<htmlurl url="prog1" name="prog1">

<htmlurl url="prog2" name="prog2">

<htmlurl url="prog3" name="prog3">

<htmlurl url="prog4" name="prog4">

<htmlurl url="prog5" name="prog5">

<htmlurl url="prog6" name="prog6">

<htmlurl url="prog7" name="prog7">

<htmlurl url="prog8" name="prog8">

<sect1>Paginas MAN relacionadas
<p>
Las paginas MAN que estan adjuntas fueron creadas con man2html, un CGI para
lenguaje HTML, originalmente llamado VH-Man2html cuyo autor es Richard
Verhoeven y que fuera modificado por Michael Hamilton.

<bf>Debido a esto, muchos de los enlaces que contienen estas paginas pueden
NO FUNCIONAR adecuadamente.</bf>  Se sugiere utilizar estas paginas MAN 
solamente para consulta e impresion.

<htmlurl url="awk.1.html" name="awk.1">

<htmlurl url="printf.1.html" name="printf.1">

<htmlurl url="printf.3.html" name="printf.3">

<htmlurl url="grep.1.html" name="grep.1">

<sect1>Este documento
<p>
<htmlurl url="awk.sgml" name="Fuente SGML de este documento">


</article>
