Cuántas líneas hay en cada archivo.
Uso wc
, originalmente para el recuento de palabras, creo, pero puede hacer líneas, palabras, caracteres, bytes y la longitud de línea más larga. La -l
opción le dice que cuente líneas.
wc -l <filename>
Esto generará el número de líneas en:
$ wc -l /dir/file.txt
32724 /dir/file.txt
También puede canalizar datos a wc
:
$ cat /dir/file.txt | wc -l
32724
$ curl google.com --silent | wc -l
63
Cuántas líneas hay en el directorio.
Tratar:
find . -name '*.pl' | xargs wc -l
otra línea:
( find ./ -name '*.pl' -print0 | xargs -0 cat ) | wc -l
Por cierto, el wc
comando cuenta nuevos códigos de líneas, no líneas. Cuando la última línea del archivo no termina con un nuevo código de línea, esto no contará.
Puede usar grep -c ^, ejemplo completo:
#this example prints line count for all found files
total=0
find /path -type f -name "*.php" | while read FILE; do
#you see use grep instead wc ! for properly counting
count=$(grep -c ^ < "$FILE")
echo "$FILE has $count lines"
let total=total+count #in bash, you can convert this for another shell
done
echo TOTAL LINES COUNTED: $total
Cuantas líneas en total
No estoy seguro de haber entendido que solicita correctamente. por ejemplo, esto generará resultados en el siguiente formato, mostrando el número de líneas para cada archivo:
# wc -l `find /path/to/directory/ -type f`
103 /dir/a.php
378 /dir/b/c.xml
132 /dir/d/e.xml
613 total
Alternativamente, puede resultar útil generar solo el número total de caracteres de línea nuevos sin el archivo por conteo de archivos al siguiente comando:
# find /path/to/directory/ -type f -exec wc -l {} \; | awk '{total += $1} END{print total}'
613
Lo más importante, necesito esto en 'formato legible por humanos', por ejemplo. 12,345,678 en lugar de 12345678
Bash tiene una función printf incorporada:
printf "%0.2f\n" $T
Como siempre, hay muchos métodos diferentes que podrían usarse para lograr los mismos resultados mencionados aquí.
printf
no lee sus argumentosstdin
, sino más bien desde la línea de comandos (compara tuberías conecho
tuberías versuscat
;cat
lee destdin
,echo
no lo hace). En su lugar, useprintf "$(find ... | xargs ...)"
para suministrar la salida como argumentos paraprintf
.En muchos casos, combinar el
wc
comando y el comodín*
puede ser suficiente.Si todos sus archivos están en un solo directorio, puede llamar a:
También puede enumerar varios archivos y directorios:
Este comando mostrará una lista de los archivos y su número de líneas.
La última línea será la suma de las líneas de todos los archivos.
Para contar todos los archivos en un directorio de forma recursiva:
Primero, habilite globstar agregando
shopt -s globstar
a su .bash_profile. El soporte para globstar requiere Bash ≥ 4.x que se puede instalarbrew install bash
si es necesario. Puedes consultar tu versión conbash --version
.Entonces corre:
Tenga en cuenta que esta salida será incorrecta si globstar no está habilitado.
fuente
wc -l **/*
wc: parent_dir/child_dir: read: Is a directory
"Este comando dará una lista de código de líneas en cada directorio:
fuente
un poco tarde para el juego, pero recibí un montón de errores de argumento con lo anterior debido al tamaño del directorio. Esto funcionó para mí:
for i in $(find . -type f); do wc -l $i; done >> /home/counts.txt
fuente
cat
combinaría los archivos en uno y generaría todo para stdout, puede hacerwc -l
eso para un recuento total de líneas de archivos en un directorio:fuente
Solo aumentaré la respuesta de @malyy para lo siguiente (demasiado grande para un comentario):
Muchas respuestas están utilizando la
wc
opción de archivo de línea de comandos conxargs
. El problema con esto es que xargs se limita a un tamaño dependiente de la plataforma bastante pequeño.Además, hay una diferencia entre BSD (macOS) y GNU (linux / homebrew)
wc
.El GNU One es ideal porque puede leer la lista de archivos de un archivo en lugar de argumentos (
--files0
).Si está en Mac y tiene homebrew, debe hacer lo siguiente:
Observe el gwc en lugar de wc .
fuente