Tú trabajas muchísimo. Yo no hago nada. Dentro de 100 años los dos estaremos muertos.
Tras 8 horas trabajando en pleno agosto, esta frase le hace a uno pensar…
El mundo de Deigote. Un diario de cualquier cosa que me resulte interesante (si a alguien más se lo resulta, es otro cantar). Espero que os guste o disguste. Incluso que os deje indiferentes sería una opción tan buena como cualquier otra.
Tú trabajas muchísimo. Yo no hago nada. Dentro de 100 años los dos estaremos muertos.
Tras 8 horas trabajando en pleno agosto, esta frase le hace a uno pensar…
Por petición popular, voy a escribir un poco sobre un mandato típico de los sistemas operativos UNIX (apareció por primera vez en 1977 nada menos), awk.
awk es un mandato que sirve para procesar líneas de texto (separadas, naturalmente, por un salto de línea). awk cuenta con un pequeño y sencillo lenguaje de programación que es interpretado (no necesita ser compilado), y resulta tremendamente útil cuando queremos extraer información de extensos campos de texto (y, posiblemente, manipularla).
El funcionamiento del madato awk es muy sencillo: basicamente tenemos dos posiblidades:
$ awk -f fuente.awk fichero_entrada.txt
$ awk 'fragmento de código fuente' fichero_entrada.txt
En la primera de ellas, el código fuente está en un fichero (recomendado para usos que vayan a repetirse con el tiempo y con códigos fuentes largos) mientras que el segundo ofrece la ventaja de poder poner el código fuente como un argumento más. Esto es muy útil para el uso de awk en scripts o similares, en los que el uso de ficheros puede ser un engorro. También cabe la posibilidad de omitir el fichero de entrada, en cuyo caso awk leerá de la entrada estándar.
Respecto al lenguaje awk, tiene una estructura similar a lo siguiente:
BEGIN { acción }
/patrón/ { acción }
END { acción }
La forma de funcionamiento la siguiente:
Respecto a los patrones de awk, son, como ya he dicho, expresiones regulares. No voy a explicar aquí todas las posiblidades porque no acabaría nunca (y con la ayuda de la Wikipedia os debería bastar), basten un par de ejemplos:
Esta es la parte más complicada de awk (ya sabeis lo que se dice de las expresiones regulares).
En cuanto a las acciones, cualquiera que haya programado en C no tendrá mucho problema, ya que es similar. Como características cabría destacar:
¿Y qué pasa con los los jugosos ejemplos? Pues he recopilado alguno que otro según me ha ido surgiendo la necesidad de usarlo estos días.
cat tomcat.log | awk '/SOAP21/{print NR " - " $0} / - 2/{print NR " - "$0}' cat tomcat.log | awk 'BEGIN { nl = 1 } /SOAP21/ { if (nl % 5 == 0) print ; nl++}'cat consulta.upm.html | grep "
/<\/table>/ { d = 0 } { if (d > 0) { if (c == 10) { print ; c = 0 } else c++ } }' | grep
'>\([1-9][0-9]\|[1-9]\|[1-9]\,[0-9]\{1\}\|[1-9]\,[0-9]\{2\}\)<' | cut -d 1 -f2 -d'>' | cut
-f1 -d'<' | awk 'BEGIN { t=0.0;n=0; } {print ; t=t+$1 ; n++} END { print "Total " t "
Asignaturas " n " Media " t/n}'EDITO: iré añadiendo más fantabulosos ejemplos
según me los vaya encontrado.
frase1 1
frase2 5
...
fraseN Mawk 'BEGIN { FS = " ";} { resultados[$1] += $2 } END { for(category in resultados) print category, resultados[category]; } *.out'
¡con awk, la suciedad se va en un bang! Aquí además podeis ver algunas cosas más de awk, como los bucles, los array (estilo PHP, sin declaración ni reserva de memoria ni inicialización de datos) y la variable especial FS, que sirve para especificar cómo separar los campos de una línea (aunque en este caso no haga falta porque por defecto es espacio o tabulador).Y esto es todo por hoy. Huelga decir que en Internet encontrareis cientos de ejemplos y tutoriales, pero yo quería hacer una pequeña introducción con un par de ejemplos más prácticos que los que suelo encontrar (al menos, serían prácticos para mí ;-)). Espero que os sea de utilidad.
Recientemente han puesto en mi facultad una serie de pequeñas placas en las puertas de las aulas, conmemorando personajes históricos en el mundo de la informática. Me ha llamado la atención ver una de Bill Gates, más que nada porque está bastante escondida en comparación con las otras, no es que yo dude que ese personaje deba estar ahí ;-).

Sólo me queda una duda.. ¿Cuánto tiempo tardará en ser mancillada? Y no es que quiera dar ideas ;-)…
PD: Para los que no querais forzar la vista, os hago una transcripción de lo que reza la placa.
Cofundador y arquitecto principal del software de Microsoft, empresa que fundó junto a Paul Allen en 1975 y que logró situar como la mayor proovedora mundial de software para ordenadores
El siguiente problema matemático fue discutido por prestigiosos investigadores de todo el mundo y creo que también es usado por Google para reclutar ingenieros. Al final tuvo que venir un niño superdotado a resolverlo. Aquí os dejo la solución:
