[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: