Tengo líneas como estas, y quiero saber cuántas líneas tengo realmente ...
09:16:39 AM all 2.00 0.00 4.00 0.00 0.00 0.00 0.00 0.00 94.00
09:16:40 AM all 5.00 0.00 0.00 4.00 0.00 0.00 0.00 0.00 91.00
09:16:41 AM all 0.00 0.00 4.00 0.00 0.00 0.00 0.00 0.00 96.00
09:16:42 AM all 3.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 96.00
09:16:43 AM all 0.00 0.00 1.00 0.00 1.00 0.00 0.00 0.00 98.00
09:16:44 AM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
09:16:45 AM all 2.00 0.00 6.00 0.00 0.00 0.00 0.00 0.00 92.00
¿Hay alguna manera de contarlos todos usando comandos de Linux?
linux
bash
command-line
scripting
Alucard
fuente
fuente
g <Ctrl-g>
, le mostrará el número de líneas, palabras, columnas y bytes<esc> :q!
esa es la única respuesta. (Esto es una broma, esto eliminará todos los cambios no guardados; la broma es que si no conoce vim es fácil estropear un archivo, así que es mejor no guardarlo).Respuestas:
Uso
wc
:Esto generará el número de líneas en
<filename>
:O, para omitir el
<filename>
uso del resultadowc -l < <filename>
:También puede canalizar datos a
wc
:fuente
wc -l <file> | awk '{print $1}
wc -l < <filename>
cat <file> | wc -l
watch wc -l <filename>
usted puede seguir este archivo en tiempo real. Eso es útil para archivos de registro, por ejemplo.Para contar todas las líneas use:
Para filtrar y contar solo líneas con uso de patrón:
O use -v para invertir la coincidencia:
Consulte la página de manual de grep para ver los argumentos -e, -i y -x ...
fuente
grep -c
funciona mejor para mí. Principalmente debido alwc -l
molesto prefijo de espacio de relleno de "características".O
fuente
hay muchas maneras. usando
wc
es uno.wc -l file
otros incluyen
awk 'END{print NR}' file
sed -n '$=' file
(GNU sed)fuente
wc -l file
le da el número de líneas Y el nombre de archivo para obtener solo el nombre de archivo que puede hacer:filename.wc -l < /filepath/filename.ext
grep -Hc ".*" file
wc -l
cuenta los caracteres de nueva línea y no las líneas reales en un archivo. Todos los otros comandos incluidos en esta respuesta le darán el número correcto en caso de que necesite las líneas.La herramienta
wc
es el "contador de palabras" en UNIX y sistemas operativos similares a UNIX, pero también puede usarlo para contar líneas en un archivo agregando la-l
opción.wc -l foo
contará el número de líneas enfoo
. También puede canalizar la salida de un programa como este:ls -l | wc -l
que le indicará cuántos archivos hay en el directorio actual (más uno).fuente
ls -l | wc -l
en realidad le dará el número de archivos en el directorio +1 para la línea de tamaño total. puede hacerls -ld * | wc -l
para obtener la cantidad correcta de archivos.Si desea verificar la línea total de todos los archivos en un directorio, puede usar find y wc:
fuente
Uso
wc
:fuente
Si todo lo que desea es el número de líneas (y no el número de líneas y el estúpido nombre de archivo que regresa):
Como se mencionó anteriormente, estos también funcionan (pero son inferiores por otras razones):
fuente
Usar
nl
así:De
man nl
:fuente
wc -l
informa como 0. Gracias.He estado usando esto:
Lo prefiero a la respuesta aceptada porque no imprime el nombre de archivo, y no tiene que usarlo
awk
para corregirlo. Respuesta aceptada:wc -l myfile.txt
Pero creo que la mejor es la respuesta de GGB667:
wc -l < myfile.txt
Probablemente lo usaré de ahora en adelante. Es un poco más corto que mi camino. Estoy poniendo mi antigua forma de hacerlo en caso de que alguien lo prefiera. El resultado es el mismo con esos dos métodos.
fuente
Los anteriores son el método preferido, pero el comando "cat" también puede ser útil:
Le mostrará todo el contenido del archivo con números de línea.
fuente
Vi esta pregunta mientras buscaba una forma de contar varias líneas de archivos, por lo que si desea contar varias líneas de un archivo .txt puede hacerlo,
también se ejecutará en un archivo .txt;)
fuente
wc -l
No cuenta líneas.Sí, esta respuesta puede llegar un poco tarde a la fiesta, pero todavía no he encontrado a nadie que documente una solución más sólida en las respuestas.
Contrariamente a la creencia popular, POSIX no requiere que los archivos terminen con un carácter de nueva línea. Sí, la definición de una línea POSIX 3.206 es la siguiente:
Sin embargo, lo que mucha gente no sabe es que POSIX también define POSIX 3.195 Incomplete Line como:
Por lo tanto, archivos sin un final
LF
son perfectamente compatibles con POSIX.Si elige no admitir ambos tipos de EOF, su programa no es compatible con POSIX.
Como ejemplo, veamos el siguiente archivo.
No importa el EOF, estoy seguro de que estaría de acuerdo en que hay dos líneas. Lo descubriste mirando cuántas líneas se han iniciado, no mirando cuántas líneas se han terminado. En otras palabras, según POSIX, estos dos archivos tienen la misma cantidad de líneas:
La página del manual es relativamente clara sobre el
wc
recuento de nuevas líneas, con una nueva línea que solo es un0x0a
personaje:Por lo tanto,
wc
ni siquiera intenta contar lo que podría llamar una "línea". Usarwc
para contar líneas puede conducir a un recuento incorrecto, dependiendo del EOF de su archivo de entrada.Solución compatible con POSIX
Puede usar
grep
para contar líneas como en el ejemplo anterior. Esta solución es más robusta y precisa, y admite todos los diferentes tipos de lo que podría ser una línea en su archivo:fuente
grep -oE '\d+'
: SOLO para devolver los números de dígitos .fuente
Devuelve solo el número de líneas
fuente
La redirección / canalización de la salida del archivo
wc -l
debería ser suficiente, como la siguiente:que luego proporcionaría el no. de líneas solamente.
fuente
O cuente todas las líneas en subdirectorios con un patrón de nombre de archivo (por ejemplo, archivos de registro con marcas de tiempo en el nombre del archivo):
fuente
Sé que esto es viejo pero aún así: cuenta las líneas filtradas
Mi archivo se ve así:
Si quiero saber cuántos archivos se envían OK:
O
fuente
cuenta el número de líneas y almacena el resultado en una variable, usa este comando:
count=$(wc -l < file.txt) echo "Number of lines: $count"
fuente
Como otros dijeron,
wc -l
es la mejor solución, pero para referencia futura puede usar Perl:$.
contiene el número de línea y elEND
bloque se ejecutará al final del script.fuente
dir | perl -lne 'END { print $. }' Can't find string terminator "'" anywhere before EOF at -e line 1.'
perl -lne '}{ print $. '
hace lo mismoAcabo de hacer un programa para hacer esto (con
node
)https://github.com/danschumann/gimme-lines/tree/master
fuente
wc -l <filename>
Esto le dará un número de líneas y un nombre de archivo en la salida.
P.ej.
wc -l 24-11-2019-04-33-01-url_creator.log
Salida
63 24-11-2019-04-33-01-url_creator.log
Utilizar
wc -l <filename>|cut -d\ -f 1
para obtener solo un número de líneas en la salida.
P.ej.
wc -l 24-11-2019-04-33-01-url_creator.log|cut -d\ -f 1
Salida
63
fuente
wc -l < filename
wc -l < filename
es diferentewc -l filename
, el primero usa la redirección y luego no hay ningún nombre de archivo en la salida, como se muestra en la respuesta del usuario85509Esta función de shell portátil desplegable [ℹ] funciona de maravilla . Simplemente agregue el siguiente fragmento a su
.bashrc
archivo (o el equivalente para su entorno de shell) .Esto debería ser totalmente compatible con todos los shells compatibles con POSIX además de bash y zsh .
fuente