txt tiene saber por para numero mostrar lineas linea cuantas contar comando caracteres cantidad archivos archivo shell unix sed awk

shell - tiene - mostrar numero de lineas de un archivo linux



Cómo imprimir el número de caracteres en cada línea de un archivo de texto (5)

Aquí está el ejemplo usando xargs :

$ xargs -I% sh -c ''echo % | wc -c'' < file

Me gustaría imprimir el número de caracteres en cada línea de un archivo de texto usando un comando de Unix. Sé que es simple con powershell

gc abc.txt | % {$_.length}

pero necesito el comando de Unix.


He intentado las otras respuestas enumeradas anteriormente, pero están muy lejos de soluciones decentes cuando se trata de archivos grandes, especialmente una vez que el tamaño de una línea ocupa más de ~ 1/4 de RAM disponible.

Tanto bash como awk sorbían 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 y no optimizada que, cuando se prueba con archivos de gran tamaño (~ 4 GB por línea), no gotea y es, de lejos, una solución mejor que las que se ofrecen.

Si se trata de un código de tiempo crítico para la producción, puede volver a escribir las ideas en C o realizar mejores optimizaciones en la lectura de llamadas (en lugar de leer solo un byte a la vez), después de probar que esto es realmente 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


Prueba esto:

while read line do echo -e |wc -m done <abc.txt


Use Awk.

awk ''{ print length($0); }'' abc.txt


while read -r line; do echo ${#line}; done < abc.txt

Es POSIX, por lo que debería funcionar en todas partes.

Editar: Agregado -r como lo sugirió William.