https://manuais.iessanclemente.net/index.php?title=Awk&feed=atom&action=historyAwk - Historial de revisiones2024-03-29T11:06:31ZHistorial de revisiones de esta página en el wikiMediaWiki 1.36.2https://manuais.iessanclemente.net/index.php?title=Awk&diff=39706&oldid=prevVieites: Página creada con «O [http://www.loquefaltaba.com/documentacion/Manual_Awk_castellano.pdf awk] é unha linguaxe de progración empregada para traballar con texto. Así permite modificar carac...»2013-11-26T19:45:26Z<p>Página creada con «O [http://www.loquefaltaba.com/documentacion/Manual_Awk_castellano.pdf awk] é unha linguaxe de progración empregada para traballar con texto. Así permite modificar carac...»</p>
<p><b>Página nueva</b></p><div>O [http://www.loquefaltaba.com/documentacion/Manual_Awk_castellano.pdf awk] é unha linguaxe de progración empregada para traballar con texto. Así permite modificar caracteres de texto sendo comunmente empregado para presentar ou gardar en variables o texto que nos interesa.<br /><br />
:: '''awk -> Exemplo 1: Imprimir a primeira columna da saída da execución do comando ls -l'''<br />
:::: ''NOTA: Por defecto o carácter espazo determina a separación entre columnas''<br />
<source lang="bash">alumno@gnu-linux:~/temporal$ ls -l<br />
total 8<br />
-rw-r--r-- 1 alumno alumno 24 2010-12-27 23:29 texto.txt<br />
-rw-r--r-- 1 alumno alumno 36 2010-12-23 20:39 usuarios.txt<br />
alumno@gnu-linux:~/temporal$ ls -l | awk '{print $1}'<br />
total<br />
-rw-r--r--<br />
-rw-r--r--<br />
</source><br />
:: '''awk -> Exemplo 2: Imprimir a primeira e oitava columna da saída da execución do comando ls -l'''<br />
<source lang="bash"><br />
alumno@gnu-linux:~/temporal$ ls -l | awk '{print $1 " " $8}'<br />
total <br />
-rw-r--r-- texto.txt<br />
-rw-r--r-- usuarios.txt<br />
</source><br />
:: '''awk -> Exemplo 3: Concatenar awk. Imprimir a primeira e oitava columna da saída da execución do comando ls -l, e logo dividir en columnas mediante o caracter punto'''<br />
<source lang="bash"><br />
alumno@gnu-linux:~/temporal$ ls -l | awk '{print $1 " " $8}' | awk -F. '{print $1 " " $2 " " $3}'<br />
total <br />
-rw-r--r-- texto txt <br />
-rw-r--r-- usuarios txt <br />
</source><br />
<br />
:: '''awk -> Exemplo 4: Imprimir por pantalla o número total de bytes de todos os ficheiros do directorio actual que foron modificados por última vez en Febreiro de 2011: '''<br />
<source lang="bash"><br />
alumno@gnu-linux:~/temporal$ ls -l | awk '$6 ~ /2011-02-/ { sum += $5 } END { print sum }'<br />
36022<br />
</source><br />
<br />
:: Tanto '''sed''' como '''awk''' son parte fundamental na execución dos scripts, pois permiten execucións dinámicas co mesmo código fonte, é dicir, o mesmo código pode xerar unha saída executable totalmente distinta. Por exemplo supoñamos o seguinte escenario:<br />
<ol><br />
<li>Temos un ''firewall'', digamos ''iptables'', que impide acceder a un servizo tcp no porto 22 (ssh)</li><br />
<li>Creamos un script que permite abrir ese porto, por exemplo contendo a seguinte liña de código:<br />
<source lang="bash"><br />
iptables -I INPUT -p tcp --dport 22 -j ACCEPT<br />
</source><br />
</li><br />
</ol><br />
Neste caso non fai falla empregar ''sed'' e ''awk'' posto que o porto sempre é o mesmo. Agora ben, supoñamos este outro escenario:<br />
<ol><br />
<li>Temos un servizo que non ten claro que portos empregar, por exemplo '''nfs''', podemos averiguar en cada momento que portos está empregando mediante o comando ''rpcinfo -p'', e co mesmo podemos ver que ser reiniciamos o servizo nfs na próxima execución os portos empregados non son os mesmos, entón agora como podemos facer que o noso script de forma estática abra eses portos? <br />
<li>Xa que cambian poderiamos coller eses portos no script como variables e facer que a sintaxe anterior difira mais ou menos na seguinte:<br />
<source lang="bash"><br />
iptables -I INPUT -p tcp --dport $PORTO_DINAMICO -j ACCEPT<br />
</source><br />
Agora ben, como facemos para coller eses portos, pois si, con ''sed'' e ''awk''. Mediante '''sed''' podemos variar as expresións á nosa vontade, por exemplo: que desaparezan os espazos, que un patrón de texto cambie... e con '''awk''' podemos separar por caracteres calquera saída en columnas ''-considerando a separación de columnas, por defecto, mediante o caracter espazo ou ben por outro caracter que indiquemos-'', co cal, se nunha saída de execución de comandos temos digamos 5 columnas, podemos recoller a columna desexada na variable pertinente.</li><br />
</ol><br />
A potencia do ''sed'' e ''awk'' é abismal xa que permite dinamizar os scripts.</div>Vieites