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]##############################
: