it-swarm-es.tech

contar líneas en un archivo

Estoy seguro de que hay muchas maneras de hacer esto: ¿cómo puedo contar el número de líneas en un archivo de texto?

$ <cmd> file.txt
1020 lines
75
Chris Smith

La forma estándar es con wc, que toma argumentos para especificar lo que debe contar (bytes, caracteres, palabras, etc.); -l es para líneas:

$ wc -l file.txt
1020 file.txt
109
Michael Mrozek

Como dijo Michael, wc -l es el camino a seguir. Pero, en caso de que inexplicablemente tenga bash, Perl o awk pero no wc, aquí hay algunas soluciones más:

Solo Bash

$ LINECT=0; while read -r LINE; do (( LINECT++ )); done < file.txt; echo $LINECT

Soluciones Perl

$ Perl -lne 'END { print $. }' file.txt

y lo mucho menos legible:

$ Perl -lne '}{ print $.' file.txt

Awk Solution

$  awk 'END {print NR}' file.txt
17
Steven D

Steven D olvidó GNU sed:

sed -n '$=' file.txt

Además, si desea el recuento sin generar el nombre de archivo y está utilizando wc:

wc -l < file.txt

Sólo por el gusto de hacerlo:

cat -n file.txt | tail -n 1 | cut -f1

Palabra de advertencia al usar

wc -l

porque wc -l funciona contando\n, si la última línea de su archivo no termina en una nueva línea, el recuento de líneas se desactivará en 1. (de ahí la convención anterior que deja nueva línea al final de su archivo)

Dado que nunca puedo estar seguro de si un archivo dado sigue la convención de terminar la última línea con una nueva línea o no, recomiendo usar cualquiera de estos comandos alternativos que incluirán la última línea en el conteo independientemente de la nueva línea o no.

sed -n $= filename
Perl -lne 'END { print $. }' filename
awk 'END {print NR}' filename
grep -c '' filename
11
pretzels1337

En caso de que solo tenga bash y absolutamente ninguna herramienta externa disponible, también puede hacer lo siguiente:

count=0
while read
do
  ((count=$count+1))
done <file.txt
echo $count

Explicación: el bucle lee la entrada estándar línea por línea (read; como de todos modos no hacemos nada con la entrada de lectura, no se proporciona ninguna variable para almacenarla), y aumenta la variable count cada vez . Debido a la redirección (<file.txt después de done), la entrada estándar para el bucle es de file.txt.

3
celtschk

Siempre puede usar el comando grep de la siguiente manera:

grep -c "^" file.txt

Contará todas las filas reales de file.txt, independientemente de si su última fila contiene un carácter LF al final.

2
Paolo