Per un file molto grande come 1 GB wc -l
sembra essere lento. Abbiamo un modo più veloce per calcolare il numero di newline per un determinato file?
wc
di avere un sovraccarico eccessivo, puoi provare a implementare il tuo foreach byte in file: if byte == '\n': linecount++
. Se implementato in C o assemblatore, non credo che andrà più veloce, tranne forse nello spazio del kernel su un RTOS con la massima priorità (o anche usando un interrupt per quello - semplicemente non puoi fare nient'altro con il sistema. .. va bene, sto divagando ;-))
time wc -l some_movie.avi
un'idea della scala, ho fatto un rapido giro su un file non cache, risultando 5172672 some_movie.avi -- real 0m57.768s -- user 0m0.255s -- sys 0m0.863s
. Il che dimostra sostanzialmente che @thrig ha ragione, in questo caso l'I / O frantuma le prestazioni.
time wc -l some_large_file_smaller_than_cache
due volte in rapida successione e vedere quanto è veloce la seconda operazione, quindi time wc -l some_large_file_larger_than_cache
vedere come il tempo non cambia tra le esecuzioni. Per un file di ~ 280 MB qui, il tempo passa da 1,7 secondi a 0,2 secondi, ma per un file da 2 GB è 14 secondi entrambe le volte.
/usr/bin/time wc -l <file>
dice? Qual è il tuo hardware? È più veloce se si esegue ripetutamente il comando? Abbiamo davvero bisogno di maggiori informazioni;)
0x0A
iness, l'I / O è senza dubbio il collo di bottiglia.