On Thursday 11 August 2005 10:31 pm, Horst von Brand wrote:

> [EMAIL PROTECTED] wrote:
> > porque es horriblemente ineficiente si $lineas es medianamente grande. A
> > menos que $lineas sea muy chico, cualquier solucion es mejor que usar
> > $(seq ...).
>
> No entiendo... el programa seq(1) se invoca solo la primera vez que se
> encuentra con la linea for. Si se te ocurre hacerlo para decenas de miles
> de lineas en una de esas algo revienta, pero...

El comando seq se invoca una sola vez, pero, (1) para valores grandes,
 produce una lista enorme que bash luego tiene que partir, etc. y (2) no hay
 forma de que bash aproveche el hecho de que esta usando _numeros_ y no texto
arbitrario. Por ejemplo:

[Sorry si esto no se ve del todo alineado. En ese caso la culpa es de kmail]

$ cat a.sh
for i in $(seq ${TOP-10000}); do

  : $i

done

$ cat b.sh
for ((i = 0; i < ${TOP-10000}; i++)); do

  : $i

done

$ cat c.sh
i=0
while [ $i -lt ${TOP-10000} ]; do

 : $((i++))

done

$ perl -MBenchmark -e 'timethese(10, { \
  "seq" => sub{system("sh a.sh")}, \
  "for((...))" => sub{system("sh b.sh")}, \
  "[ -lt ]" => sub{system("sh c.sh")}})'
Benchmark: timing 10 iterations of [ -lt ], for((...)), seq...
   [ -lt ]:  4 wallclock secs ( 4.86 cusr  0.15 csys =  5.01 CPU)
for((...)):  3 wallclock secs ( 3.85 cusr  0.11 csys =  3.96 CPU)
       seq:  5 wallclock secs ( 4.91 cusr  0.05 csys =  4.96 CPU)

No muy dramatico, cierto. La cosa se pone mucho peor mientras mas grande el
numero de iteraciones:

$ TOP=25000 perl -MBenchmark -e 'timethese(10, { \
  "seq" => sub{system("sh a.sh")}, \
  "for((...))" => sub{system("sh b.sh")}, \
  "[ -lt ]" => sub{system("sh c.sh")}})'
Benchmark: timing 10 iterations of [ -lt ], for((...)), seq...
   [ -lt ]: 13 wallclock secs ( 12.29 cusr  0.38 csys = 12.68 CPU)
for((...)): 10 wallclock secs ( 9.29 cusr  0.22 csys =  9.52 CPU)
       seq: 29 wallclock secs ( 28.73 cusr  0.06 csys = 28.79 CPU)

Si el numero de iteraciones es el numero de lineas en un archivo, 25000
no es para nada excesivo.

Ocioso a las 3:30am,
-ag

-------------------------------------------------------
From [EMAIL PROTECTED]  Fri Aug 12 17:28:02 2005
From: [EMAIL PROTECTED] (r4str0)
Date: Sat Aug 13 08:04:03 2005
Subject: [?]: Tiempo de llegada de e-mails a la lista.
In-Reply-To: <[EMAIL PROTECTED]>
References: <[EMAIL PROTECTED]>
Message-ID: <[EMAIL PROTECTED]>

On Friday 12 August 2005 16:41, Horst von Brand wrote:
> Tarda 6 horas en que? Llegar a la maquina aca? O que te llegue de vuelta?
> Que dicen los encabezados de los mensajes?

Sip, en llegar a la lista, éste e-mail los estoy respondiendo a las 17:28 hora 
de Caracas (creo que tenemos la misma hora), veremos cuando llega allá.

Los headers se ven bien, lo normal.

> > ¿Quieres un listado de tu programa con las líneas numeradas?
> > Prueba: grep -n $ mi_prog.c > mi_prog.no.c
> > -n es para numerar las líneas; y $ para fin de línea ...
>
> Prueba: cat -n tu_prog.c > tu_prog.no.c
>
> [cat(1) es mas liviano que grep(1), obviamente. Reportalo!]

Buen tip.

Saludos.
-- 
:
####[ GNU/Linux One Stanza Tip (LOST) ]#######################

Tema: Registro de usuarios de Linux                  LOST #058

No hay forma de saber el número exacto de usuarios de Linux en
el mundo... hace cinco años se inició un contador. Todos los
usuarios de Linux NO registrados deberían registrarse una sola
vez en: http://counter.li.org/

####[unmadindu (at) hotmail.com]##############################
:

Responder a