Oke, un viejo compañero de programación (hemos coincidido en proyectos para México, Roma y China) y Yo hemos creado recientemente un script para compilar “de un golpe” toda la aplicación en la que andamos metidos acualmente.
El caso es que una de las lineas del script es esta: (lo he puesto en varias lineas para que se pueda leer).
awk '/\$\{HOME\}/{
match($0,/^(\*|.*)#/);
if(RLENGTH==-1)
{
gsub(/\$\{HOME\}/,ENVIRON["HOME"]);
printf("%s\n",$0);
}
}
/\$\{BASESHFRWORK\}/{
match($0,/^(\*|.*)#/);
if( RLENGTH==-1)
{
gsub(/\$\{BASESHFRWORK\}/,ENVIRON["BASESHFRWORK"]);
printf("%s\n",$0);
}
}' dependencias > dependencias.sub
¡Acojonante eh!, la verdad es que es una linea infernal. En una linea se recorre un archivo sustituyendo todas las partes donde ponga “${BASESHFRWORK} o ${HOME}” por el contenido de una variable de entorno con el mismo nombre, además el script descarta todas las lineas que comienzen por “#” (excepto espacios en blanco y tabuladores, al principio de la linea). Todo el resultado de este “filtrado” lo deja en otro archivo.
En fin, vaya putada para el que tenga que leer el script, cuando vea la linea infernal.
Vale, prometo que, al menos, lo comentaré bien y si hay tiempo lo mejoraré.

