Re: shell scripting
* Cuenta la leyenda que Emilio J. Padrón (emilioj@mail2.udc.es) escribió:
> ¡Gracias pedazo CRACK!
> Me ha venido de perlas tu solución, con lo que ya me ahorro los
> problemas que estaba teniendo con lo de pasar valores entre shells.
> Finalmente me ha quedado así (a lo mejor es un poco chapuza, pero no
> suelo escribir muchos scripts y nunca había usado awk):
>
> -------------------------------------------
> #/bin/sh
>
> ETIQUETA="TOTAL TIME"
>
> grep -h "${ETIQUETA}" ${1:-*} | awk '
> BEGIN{ MAX="nada"; MIN="nada"; CONT=0; MEDIA=0; }
> { if ( (MAX == "nada") || ( MAX < $3 ) ) MAX = $3; }
> { if ( (MIN == "nada") || ( MIN > $3 ) ) MIN = $3; }
> { CONT ++; }
> { MEDIA += $3 }
> END{ print "min = "MIN; print "max = "MAX; print "media = "MEDIA /
> CONT; }'
> -------------------------------------------
>
> y.... ¡Funciona!
>
> Una cosilla, eso sí, cuando alguna de las líneas que el grep le pasa
> al awk no tiene la columna que necesito (la 3 en este caso), el cálculo
> del mínimo no funciona bien (son números reales, y supongo que awk
> debe de considerar por ejemplo: 0.89234 > null). A ver cómo lo
> soluciono, pero no me es vital.
>
>
> Muchíiiiisimas gracias por el cable.
>
> Saludos.
Te lo corrijo y te tiro otro dato:
awk '
BEGIN{ MAX="nada"; MIN="nada"; CONT=0; MEDIA=0; ETIQUETA="TOTAL TIME"}
$0 ~ ETIQUETA{
if ( (MAX == "nada") || ( MAX < $3 ) ) MAX = $3;
if ( (MIN == "nada") || ( MIN > $3 ) ) MIN = $3;
CONT ++;
MEDIA += $3
}
END{ print "min = "MIN; print "max = "MAX; print "media = "MEDIA / CONT; }' ${1:-*}
No te garantizo que funcione, pero te recomiendo una lectura profunda
de la pagina man
--
Saludos,
Germán
Reply to: