que he probado las otras respuestas mencionadas anteriormente, pero están muy lejos de las soluciones dignas cuando se trata de archivos de gran tamaño - especialmente una vez que el tamaño de una sola línea ocupa más de ~ 1/4 de RAM disponible.
Tanto bash como awk sorben toda la línea, aunque para este problema no es necesario. Bash errará una vez que una línea sea demasiado larga, incluso si tiene suficiente memoria.
Implementé una secuencia de comandos python extremadamente simple, no optimizada, que cuando se prueba con archivos grandes (~ 4 GB por línea) no gotea y es, con mucho, una solución mejor que las que se ofrecen.
Si este es el código de tiempo crítico para producción, puede volver a escribir las ideas en C o realizar mejores optimizaciones en la lectura (en lugar de leer solo un byte a la vez), después de probar que esto es un cuello de botella.
El código asume que newline es un carácter de salto de línea, que es una buena suposición para Unix, pero YMMV para Mac OS/Windows. Asegúrese de que el archivo finalice con un salto de línea para garantizar que no se pase por alto el último recuento de caracteres de la línea.
from sys import stdin, exit
counter = 0
while True:
byte = stdin.buffer.read(1)
counter += 1
if not byte:
exit()
if byte == b'\x0a':
print(counter-1)
counter = 0
Primera regla del desarrollo de software: "no" significa "no". Use "num" o "número". –
[citación necesitada]. – uprego