Pour un très gros fichier comme 1 Go, wc -l
il s'avère être lent. Avons-nous un moyen plus rapide de calculer le nombre de sauts de ligne pour un fichier particulier?
wc
avoir trop de frais généraux, vous pouvez essayer d'implémenter le vôtre foreach byte in file: if byte == '\n': linecount++
. S'il est implémenté en C ou en assembleur, je ne pense pas que cela va être plus rapide, sauf peut-être dans l'espace du noyau sur un RTOS avec la plus haute priorité (ou même utiliser une interruption pour cela - vous ne pouvez tout simplement rien faire d'autre avec le système. .. d'accord, je m'égare ;-))
time wc -l some_movie.avi
sur un fichier non mis en cache, ce qui a entraîné 5172672 some_movie.avi -- real 0m57.768s -- user 0m0.255s -- sys 0m0.863s
. Ce qui prouve que @thrig a raison, les E / S anéantissent vos performances dans ce cas.
time wc -l some_large_file_smaller_than_cache
deux fois de suite rapidement et de voir à quelle vitesse la deuxième opération est, puis de time wc -l some_large_file_larger_than_cache
voir comment le temps ne change pas entre les exécutions. Pour un fichier de ~ 280 Mo ici, le temps passe de 1,7 seconde à 0,2 seconde, mais pour un fichier de 2 Go, c'est 14 secondes les deux fois.
/usr/bin/time wc -l <file>
dit-on, quel est votre matériel? Est-ce plus rapide si vous exécutez la commande à plusieurs reprises? Nous avons vraiment besoin de plus d'informations;)
0x0A
iness, les E / S sont sans aucun doute le goulot d'étranglement.