Je dois lire un gros fichier et avant de commencer à le lire, j'ai besoin de connaître le nombre total de lignes dans le fichier (qui sont en millions).
J'ai mis en place de nombreuses solutions et j'en ai trouvé une. Mais pendant ma recherche, je pensais voir comment ça wc -l
marche. Je n'ai rien trouvé sur Google.
Bien que j'aie trouvé une solution à mon problème, j'aimerais quand même savoir comment ça wc -l
marche car il peut calculer le nombre de lignes d'un fichier de 92 millions de lignes en quelques secondes!
Comment?
Réponses:
Il lit le fichier entier et compte le nombre de fins de ligne. Compter les fins de ligne est vraiment bon marché; la plupart du temps passé à lire le fichier. Si le fichier se trouve (principalement) dans le cache de tampon, ce sera aussi bon marché. Sinon, cela dépendra de la vitesse de stockage de vos fichiers.
En d'autres termes, il n'y a pas de magie.
la source
WC lit simplement le fichier en blocs d'octets bruts (de préférence en multiples de la taille de bloc naturelle du système de fichiers sous-jacent sur lequel se trouve le fichier).
Ensuite, il balaye simplement le tampon en comptant les caractères de fin de ligne. (Il compte également les espaces, les tabulations, les flux de formulaires et d'autres caractères spéciaux, juste au cas où vous souhaiteriez d'autres informations que la sortie -l.)
La lecture à partir du disque est la partie coûteuse en termes de vitesses. L'analyse du tampon prend un temps négligeable par rapport à cela.
Supposons que vous ayez 90 millions de lignes avec en moyenne 100 caractères par ligne.
Cela représente environ 9 000 000 000 de caractères, soit environ 860 Mo.
Un PC décent avec un lecteur SATA-3Gb / s le fera en moins de 10 secondes. Même sur un système de fichiers relativement lent avec une autre activité en cours en même temps.
Une machine rapide avec un réglage des performances et un système de fichiers optimisé peut le faire en moins de 5 secondes, même sans avoir à recourir à SATA-6G et à un lecteur SSD.
la source
\n
) - "-l, --lines affiche le nombre de sauts de ligne \ n \" - extrait dewc.c
wc -l
.. désolé ...Bienvenue dans le monde du logiciel libre. Vous pouvez toujours regarder le code source
Bien que je dois admettre que je ne suis pas un programmeur C, je ne suis donc pas celui qui peut vraiment vous expliquer le code (et je serais moi-même intéressé).
Ce que je sais, c'est que puisque wc n'ouvre pas le fichier lui-même, mais demande au système d'exploitation de le faire, cela dépend en grande partie du système d'exploitation et, bien sûr, de la façon dont le fichier est stocké. En dehors de cela, je m'attends à ce que des pratiques de programmation correctes soient en place, par exemple, ne pas essayer de lire le fichier dans son ensemble à la fois, etc.
la source