On Wed, Nov 27, 2002 at 11:21:35AM -0300, German Gutierrez wrote:
> * Cuenta la leyenda que Emilio J. Padr�n ([EMAIL PROTECTED]) escribi�:
> > On Wed, Nov 27, 2002 at 12:53:57PM +0100, Victor Calzado Mayo wrote:
> > > -----BEGIN PGP SIGNED MESSAGE-----
> > > Hash: SHA1
> > > 
> > > Hola
> > > On Wednesday 27 November 2002 12:14, Emilio J. Padr�n wrote:
> > > > Hola lista,
> > > >
> > > > �c�mo puede hacer para que una variable de entorno que hereda una
> > > > subshell se pueda modificar en esa subshell y el valor modificado quede
> > > > actualizado en la shell padre?
> > > 
> > > Si se trata de pasar cosas entre una subshell y su shell madre no puedes 
> > > utilizar variables de entorno, aunque no te lo podr�a jurar, si necesitas 
> > > que 
> > > un script herede las variables modificadas por otro puedes evitar usar el 
> > > fork de la subshell ejecuntando el script2 con .
> > > 
> > > ....
> > > 
> > 
> > 
> > Gracias a todos por las respuestas. 
> > 
> > El problema b�sico me lo estoy encontrando al enlazar dos comandos con
> > una tuber�a dentro de un scripts:
> > 
> > grep -h "${ETIQUETA}" ${1:-*} | while read KK0 KK1 T
> > 
> > en el while lo que hago es buscar los valores m�ximo y m�nimo en una
> > lista de valores (resultado del grep). El caso es que no consigo que una
> > vez ejecutado el while los valores de las variables MAX y MIN
> > permanezcan (los comandos enlazados por una tuber�a se ejecutan cada
> > uno en una subshell, seg�n tengo entendido). Es decir, algo como:
> > 
> > ----------------
> > export MAX=0
> > 
> > grep -h "${ETIQUETA}" ${1:-*} | while read KK0 KK1 T
> > do
> > 
> > if [ $MAX ]
> > then
> >         if [ `echo "$T<$MAX" | bc` = 1 ]
> >         then
> >         continue
> >         fi
> > fi
> > MAX=$T
> > done
> > 
> > echo $MAX
> > ----------- 
> > y que funcione, claro :-)
> > 
> > como me hab�is dado varios consejos interesantes a ver si busco una
> > soluci�n/alternativa.
> > 
> 
> Alternativa awk:
> 
> grep -h "${ETIQUETA}" ${1:-*} | awk '
> BEGIN{ max="nada" }
> { if ( (max == "nada") || ( max < $3 ) ) max = $3; }
> END{print max}'
> 
> pudiendo hacer:
> 
> maximo=`grep -h "${ETIQUETA}" ${1:-*} | awk 'BEGIN{ max="nada" }{ if ( (max 
> == "nada") || ( max < $3 ) ) max = $3; }END{print max}'` 
> echo el mas grandote es: $maximo
> 
> 
> Espero te sirva...
> 


�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.

Responder a