<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://www.sindominio.net/hackmeeting/skins/common/feed.css?144"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>http://www.sindominio.net/hackmeeting/index.php?title=2009/Nodos/Introducci%C3%B3n_a_AWK_en_12_ejemplos/Documentaci%C3%B3n&amp;feed=atom&amp;action=history</id>
		<title>2009/Nodos/Introducción a AWK en 12 ejemplos/Documentación - Historial de revisiones</title>
		<link rel="self" type="application/atom+xml" href="http://www.sindominio.net/hackmeeting/index.php?title=2009/Nodos/Introducci%C3%B3n_a_AWK_en_12_ejemplos/Documentaci%C3%B3n&amp;feed=atom&amp;action=history"/>
		<link rel="alternate" type="text/html" href="http://www.sindominio.net/hackmeeting/index.php?title=2009/Nodos/Introducci%C3%B3n_a_AWK_en_12_ejemplos/Documentaci%C3%B3n&amp;action=history"/>
		<updated>2013-05-25T02:01:04Z</updated>
		<subtitle>Historial de revisiones para esta página en el wiki</subtitle>
		<generator>MediaWiki 1.13alpha</generator>

	<entry>
		<id>http://www.sindominio.net/hackmeeting/index.php?title=2009/Nodos/Introducci%C3%B3n_a_AWK_en_12_ejemplos/Documentaci%C3%B3n&amp;diff=15704&amp;oldid=prev</id>
		<title>Francisco en 12:53 11 oct 2009</title>
		<link rel="alternate" type="text/html" href="http://www.sindominio.net/hackmeeting/index.php?title=2009/Nodos/Introducci%C3%B3n_a_AWK_en_12_ejemplos/Documentaci%C3%B3n&amp;diff=15704&amp;oldid=prev"/>
				<updated>2009-10-11T12:53:37Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Script para visualizar la charla:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
awk '/^###/{system(&amp;quot;read N;clear&amp;quot;); print ;next} /^·/{system(&amp;quot;read N&amp;quot;); print ;next} {print $0}' awk_hm.txt &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Archivo awk_hm.txt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
####   HACKMEETING 2009 -  AWK  (1/12)  ####&lt;br /&gt;
&lt;br /&gt;
   Normanlente encontramos AWK de esta forma: &lt;br /&gt;
·       ps -ef| grep root| awk '{print $8}'&lt;br /&gt;
&lt;br /&gt;
·   Es la mejor forma de selecionar columnas de un fichero &lt;br /&gt;
    Pero si miras el man, podrás aprender alguna cosa más&lt;br /&gt;
&lt;br /&gt;
·   podemos quitar el grep:&lt;br /&gt;
        ps -ef| awk '/root/{print $8}'&lt;br /&gt;
&lt;br /&gt;
·   nos aseguramos que buscamos root en la columna de usuario:&lt;br /&gt;
        ps -ef| awk '$1 ~ /root/{print $8}'&lt;br /&gt;
&lt;br /&gt;
·   imprimimos la cadena completa de comando y argumentos:&lt;br /&gt;
        ps -ef| awk '$1 ~ /root/{$1=$2=$3=$4=$5=$6=$7=&amp;quot;&amp;quot;; printf $0}'&lt;br /&gt;
&lt;br /&gt;
·   tampoco hay que fliparse, a veces es mejor utilizar otros comandos&lt;br /&gt;
        ps -ef| awk '$1 ~ /root/{print $0}'| cut -c47- &lt;br /&gt;
&lt;br /&gt;
####   HACKMEETING 2009 -  AWK  (2/12)  ####&lt;br /&gt;
&lt;br /&gt;
    AWK es una herramienta &lt;br /&gt;
      - muy potente para hacer varias cosas a la vez&lt;br /&gt;
      - codigo muy condesado&lt;br /&gt;
      - muy eficiente&lt;br /&gt;
&lt;br /&gt;
·   se utiliza como filtro de documentos y salidas de comandos (parseador)&lt;br /&gt;
    es una herramienta multiusos en linea de comandos y pequeños scripts&lt;br /&gt;
&lt;br /&gt;
·   awk busqueda { acción }&lt;br /&gt;
        busqueda { acción }&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
####   HACKMEETING 2009 -  AWK  (3/12)  ####&lt;br /&gt;
&lt;br /&gt;
    Puedes hacer operaciones matemáticas, sin más. &lt;br /&gt;
&lt;br /&gt;
·       ls -l *pdf| awk '{S+=$5 } '&lt;br /&gt;
·       ls -l *pdf| awk '{S+=$5 } END{print &amp;quot;Total &amp;quot; S/2^10 &amp;quot;Media &amp;quot; S/NR}'&lt;br /&gt;
&lt;br /&gt;
·    BEGIN{ acción}  ...  END{ acción}&lt;br /&gt;
    Se ejecuta antes y despues de procesar las líneas de datos.&lt;br /&gt;
    Se suele utilizar para inicializar variables, escribir cabezeras, y resultados finales.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
·       ls -l *pdf| awk '{S+=$5 } END{print &amp;quot;Total &amp;quot; S/2^10&amp;quot; Kb Media &amp;quot; int(S/NR/2^10)&amp;quot; Kb&amp;quot;}'&lt;br /&gt;
·       find . -name &amp;quot;*pdf&amp;quot; -ls | awk '{S+=$7 } i\&lt;br /&gt;
            END{print &amp;quot;Total &amp;quot; NR&amp;quot; Ficheros &amp;quot; S/2^20&amp;quot; Mb Media &amp;quot; int(S/NR/2^10)&amp;quot; Kb&amp;quot;}'&lt;br /&gt;
&lt;br /&gt;
####   HACKMEETING 2009 -  AWK  (4/12)  ####&lt;br /&gt;
&lt;br /&gt;
    AWK es realmente potente en búsquedas de grandes ficheros de logs.&lt;br /&gt;
&lt;br /&gt;
·      awk '/Windows/{                          T=$4                          }'  access.log&lt;br /&gt;
·      awk '/Windows/{if (T!=$4) N=0; else N++ ;T=$4;                         }'  access.log&lt;br /&gt;
&lt;br /&gt;
·   Sentencias de control de flujo:&lt;br /&gt;
&lt;br /&gt;
       if ( expr ) statement else statement &lt;br /&gt;
       for ( opt_expr ; opt_expr ; opt_expr ) statement&lt;br /&gt;
       while ( expr ) statement&lt;br /&gt;
   &lt;br /&gt;
·      awk '/Windows/{if (T!=$4) N=0; else N++ ;T=$4; if( N &amp;gt; 10 ) print T&amp;quot; &amp;quot;N}'  access.log&lt;br /&gt;
 &lt;br /&gt;
·      awk '/Windows/{if (T!=$4) N=0; else N++ ;T=$4; if( N == 11 ) \ &lt;br /&gt;
           system(&amp;quot;echo &amp;quot;T&amp;quot; &amp;quot;N&amp;quot; Conexiones | mailx -s \&amp;quot;Ataque Windows\&amp;quot; fmartin&amp;quot; )}'  access.log &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####   HACKMEETING 2009 -  AWK  (5/12)  ####&lt;br /&gt;
&lt;br /&gt;
    Tenemos disponibles un buen número de funciones&lt;br /&gt;
    manejo de cadena:  index(s,t) length(s) match(s,r)  substr(s,i,n) &lt;br /&gt;
·   aritmeticas: cos(x) exp(x) int(x) &lt;br /&gt;
&lt;br /&gt;
·   Y tambien tenemos el comando printf que nos permite dar formato a la salidas de &lt;br /&gt;
    la forma necesaria, es similar a C: printf formato, lista-expresiones &lt;br /&gt;
 &lt;br /&gt;
·       acpi | awk '{N=int($4/10);  printf &amp;quot;[%-10.&amp;quot;N&amp;quot;s] %s\n&amp;quot;,&amp;quot;##########&amp;quot;,$4}'&lt;br /&gt;
·       acpi | awk '{printf &amp;quot;[%-10.&amp;quot;int($4/10)&amp;quot;s] %s\n&amp;quot;,&amp;quot;##########&amp;quot;,$4}'&lt;br /&gt;
&lt;br /&gt;
####   HACKMEETING 2009 -  AWK  (6/12)  ####&lt;br /&gt;
&lt;br /&gt;
    Separadores de campo con -F&lt;br /&gt;
    otras variables internas FS RS NF NR OFS &lt;br /&gt;
&lt;br /&gt;
·      awk '{print $4}' access.log| awk -F&amp;quot;/&amp;quot; '{print $1}'| sort -u&lt;br /&gt;
&lt;br /&gt;
·    Admite tantos campos separadores como necesitemos&lt;br /&gt;
&lt;br /&gt;
·      awk '{print $4}' access.log| awk -F&amp;quot;/|:|[&amp;quot; '{print $1&amp;quot; &amp;quot;$2&amp;quot; &amp;quot;$4}' | sort -u&lt;br /&gt;
&lt;br /&gt;
·  Tambien se pueden usar cadenas de varios careacteres con separador&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####   HACKMEETING 2009 -  AWK  (7/12)  ####&lt;br /&gt;
&lt;br /&gt;
     Veamos un ejemplo que busca las líneas entre dos marcas en un texto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
·      awk '/&amp;lt;!-- start content --&amp;gt;/{P=&amp;quot;on&amp;quot;;print &amp;quot;&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
·      awk '/&amp;lt;!-- start content --&amp;gt;/{P=&amp;quot;on&amp;quot;;print &amp;quot;&amp;quot;} /&amp;lt;b&amp;gt;Resumen&amp;lt;\/b&amp;gt;:&amp;lt;br \/&amp;gt;/{P=&amp;quot;off&amp;quot;}        \&lt;br /&gt;
·           { if (P == &amp;quot;on&amp;quot;) {gsub(&amp;quot;&amp;lt;[^&amp;lt;]*&amp;gt;&amp;quot;,&amp;quot;&amp;quot;,$0);&lt;br /&gt;
·      awk '/&amp;lt;!-- start content --&amp;gt;/{P=&amp;quot;on&amp;quot;;print &amp;quot;&amp;quot;} /&amp;lt;b&amp;gt;Resumen&amp;lt;\/b&amp;gt;:&amp;lt;br \/&amp;gt;/{P=&amp;quot;off&amp;quot;}        \&lt;br /&gt;
            { if (P == &amp;quot;on&amp;quot;) {gsub(&amp;quot;&amp;lt;[^&amp;lt;]*&amp;gt;&amp;quot;,&amp;quot;&amp;quot;,$0); if (NF &amp;gt; 0 )  print $0}}' charla.html&lt;br /&gt;
&lt;br /&gt;
      La variable P la utilizamos para saber si tenemos que imprimir o no&lt;br /&gt;
    de esta forma se imprimen varias líneas entre dos marcas.&lt;br /&gt;
&lt;br /&gt;
####   HACKMEETING 2009 -  AWK  (8/12)  ####&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   Y hay mucho más: arrays, funciones definidas por el usuario, &lt;br /&gt;
   programas awk ( #!/usr/bin/awk ), pasarle variables de entorno, etc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####   HACKMEETING 2009 -  AWK  (9/12)  ####&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
·   Esta charla se visualiza con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
·      awk '/^###/{system(&amp;quot;read N;clear&amp;quot;); print ;next} \&lt;br /&gt;
            /^·/{system(&amp;quot;read N&amp;quot;); print ;next} {print $0}' awk_hm.txt &lt;br /&gt;
&lt;br /&gt;
   Con next avanzamos una línea en la entrada.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####   HACKMEETING 2009 -  AWK  (10/12)  ####&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
             PREGUNTAS ????&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####   HACKMEETING 2009 -  AWK  (11/12)  ####&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    man awk&lt;br /&gt;
&lt;br /&gt;
    http://www.loquefaltaba.com/documentacion/Manual_Awk_castellano.pdf&lt;br /&gt;
&lt;br /&gt;
·    Francisco Martín  ffmartin@gmail.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
·                 GRACIAS !!!!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
####   HACKMEETING 2009 -  AWK  (12/12)  ####&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                   FIN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Francisco</name></author>	</entry>

	</feed>