Para um arquivo realmente grande como 1 GB, wc -l
é lento. Temos uma maneira mais rápida de calcular o número de novas linhas para um arquivo específico?
wc
de ter sobrecarga demais, tente implementar o seu próprio foreach byte in file: if byte == '\n': linecount++
. Se implementado em C ou assembler, acho que não ficará mais rápido, exceto talvez no espaço do kernel em um RTOS com maior prioridade (ou até use uma interrupção para isso - você simplesmente não pode fazer mais nada com o sistema. .. tudo bem, eu discordo ;-))
time wc -l some_movie.avi
em um arquivo não armazenado em cache, resultando em 5172672 some_movie.avi -- real 0m57.768s -- user 0m0.255s -- sys 0m0.863s
. O que basicamente prova que o @thrig está certo, a E / S prejudica seu desempenho nesse caso.
time wc -l some_large_file_smaller_than_cache
duas vezes em rápida sucessão e veja a rapidez da segunda operação, time wc -l some_large_file_larger_than_cache
e veja como o tempo não muda entre as execuções. Para um arquivo de ~ 280 MB aqui, o tempo varia de 1,7 segundos a 0,2 segundos, mas para um arquivo de 2 GB são 14 segundos nas duas vezes.
/usr/bin/time wc -l <file>
diz? Qual é o seu hardware? É mais rápido se você executar o comando repetidamente? Nós realmente precisamos de mais informações;)
0x0A
, a E / S é sem dúvida o gargalo.