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.