Para un archivo realmente grande como 1GB wc -l
resulta ser lento. ¿Tenemos una forma más rápida de calcular el número de líneas nuevas para un archivo en particular?
wc
tiene demasiada sobrecarga, puede intentar implementar la suya foreach byte in file: if byte == '\n': linecount++
. Si se implementa en C o ensamblador, no creo que sea más rápido, excepto tal vez en el espacio del kernel en un RTOS con la máxima prioridad (o incluso usar una interrupción para eso; simplemente no puede hacer nada más con el sistema). .. de acuerdo, estoy divagando ;-))
time wc -l some_movie.avi
en un archivo sin caché, lo que resultó en 5172672 some_movie.avi -- real 0m57.768s -- user 0m0.255s -- sys 0m0.863s
. Lo que básicamente demuestra que @thrig es correcto, la E / S destruye su rendimiento en este caso.
time wc -l some_large_file_smaller_than_cache
dos veces seguidas y ver qué tan rápida es la segunda operación, time wc -l some_large_file_larger_than_cache
y ver cómo el tiempo no cambia entre las ejecuciones. Para un archivo de ~ 280MB aquí, el tiempo va de 1.7 segundos a 0.2 segundos, pero para un archivo de 2GB son 14 segundos las dos veces.
/usr/bin/time wc -l <file>
dice? ¿Cuál es tu hardware? ¿Es más rápido si ejecuta el comando repetidamente? Realmente necesitamos más información;)
0x0A
, la E / S es sin duda el cuello de botella.