Lo bueno de aprender AWK es que al tenerlo fresco, se convierte en una herramienta de uso diario en el shell. Últimamente lo uso mucho, por ejemplo hoy, lo usé en el siguiente caso que les voy a plantear. Necesitaba pasar un texto a minúsculas, que era algo que no sabía cómo hacer, hasta que lo necesité. En verdad tenía un archivo de texto (items.txt) lleno de datos con el siguiente formato:
* TITULO DEL ITEM - Descripción del ítem.
Lo que necesitaba era obtener una lista así:
titulo del item 1, titulo del item 2, ... , titulo del item n.
Y obviamente, lo primero que se me ocurrió fue usar AWK.
<conceptosAWK>
AWK es un lenguaje de programación interpretado orientado a datos. Recibe texto como entrada, y trabaja con eso. Ejecuta una acción por cada línea de texto, y a su vez, cada dato “separado” en esa linea de texto es un registro al que se accede con $1, $2, … , $n.
El separador de registros es importante. Por defecto toma el espacio como separador.
</conceptosAWK>
En este archivo en particular, opté empezar por separar el título de su descripción. Primero proceso el archivo para eliminar lo que hay después del guión. Para eso especifico que el separador de campo sea el guión “-”:
awk 'BEGIN{FS="-"}{print $1}' items.txt > resultado.txt
Lo que estoy haciendo acá, es especificando que separe los registros por “-”. Entonces $1 va a ser “* TITULO DEL ITEM” y $2 va a ser “Descripción del ítem.“. Le paso como parámetro items.txt, y voy guardando el resultado en resultado.txt. (Redirijo la salida del awk con “>” a un archivo de texto resultado.txt).
El archivo resultado.txt me queda con el formato: “* TITULO DEL ITEM” para cada ítem. Ahora lo paso a minúsculas, y de paso saco el asterisco que no lo necesito:
awk 'BEGIN{FS="*"}{print tolower($2", ")}' $2
Me quedó algo así:
titulo del item 1 , titulo del item 2 , … , titulo del item n ,
Ahora, lo que tengo que hacer sacar el espacio antes de las comas, para eso puedo usar SED:
sed s/\ ,/,/
Reemplazo los ” ,” con “,” y listo. El archivo quedó:
titulo del item 1 , titulo del item 2 , … , titulo del item n ,
Me hice un script, que recibe como parámetros dos archivos. El primer parámetro $1, es el archivo que hay que editar, y el segundo parámetro $2 va a ser el resultado:
#!/bin/bash awk 'BEGIN{FS="-"}{print $1}' $1 > $2 echo `awk 'BEGIN{FS="*"}{print tolower($2", ")}' $2` > $2 echo `sed s/\ ,/,/ $2` > $2
Lo novedoso, por lo menos para mí, fue el uso de la función “tolower” en AWK. Así que para pasar un texto a minúsculas o a mayúsculas de forma bien sencilla, simplemente hay que usar esta función. Idem para pasar a mayúsculas: toupper. Los scripts quedarían algo así:
Para pasar todo el texto a minúsculas:
tolower.sh #!/bin/bash echo $@ | awk '{print tolower($0)}' #Este script pasa a minúsculas todos los parámetros que reciba.
Para pasar todo el texto a mayúsculas:
toupper.sh #!/bin/bash echo $@ | awk '{print toupper($0)}' #Este script pasa a mayúsculas todos los parámetros que reciba.
O directamente, si se acuerdan cómo usar AWK, lo más rápido es hacerlo derecho desde consola.
Y tá, eso es lo que estuve haciendo en un rato. Como estuvo divertido, lo documenté por acá ![]()
En una de esas a alguien le sirve.
Si te gustó éste post, podés apoyar a PicandoCódigo a través de PayPal!

Los contenidos de éste sitio se encuentran publicados bajo
Rodolfo Pilas
Julio 22, 2008 a las 10:25 pmMozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9) Gecko/2008062517 Firefox/3.0
No te voy a negar que con awk se puede hacer, pero bueno… LA herramienta para esto es tr:
Saludetes.
Rodolfo Pilas
Julio 22, 2008 a las 10:26 pmMozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9) Gecko/2008062517 Firefox/3.0
Ah! miercoles, no le gustó al coso este las redirecciones en blockquote… va con etiquetas code:
tr [:upper:] [:lower:] resultado.txtRodolfo Pilas
Julio 22, 2008 a las 10:28 pmMozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9) Gecko/2008062517 Firefox/3.0
jajajajaa!! con etiquetas code tampoco!!! cool!
fernando
Julio 22, 2008 a las 10:34 pmMozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071618 Iceweasel/3.0.1 (Debian-3.0.1-1)
Rodolfo:
Gracias por el aporte. En verdad había encontrado la forma de hacerlo con tr, así tal cual mencionas, pero me resultó más divertido AWK
Creo que no hay forma de poner los símbolos de mayor y menor, siempre tengo problema con eso:
Usando code:
"< "Usando pre:
Usando “<”: <
fernando
Julio 22, 2008 a las 10:35 pmMozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071618 Iceweasel/3.0.1 (Debian-3.0.1-1)
Bueno, con los tags “<pre>” anda, también escribiendo el equivalente al símbolo en HTML: & l t ; y & g t ;
(Si los pongo juntos me escribe <>)
Fabio R Panettieri
Julio 23, 2008 a las 12:20 pmMozilla/5.0 (X11; U; Linux i686; es-AR; rv:1.9) Gecko/2008061015 Firefox/3.0
Ya se que es un post de AWK pero justo recien hice un scriptcito en python para hacer justo eso, y lo queria compartir
Espero que no l otomen a mal, y que sirva para aportar
fernando
Julio 23, 2008 a las 1:23 pmMozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071618 Iceweasel/3.0.1 (Debian-3.0.1-1)
Fabio, por el contrario, se agradece mucho tu aporte! Gracias por compartirlo