A maneira padrão é com wc
, que recebe argumentos para especificar o que deve contar (bytes, caracteres, palavras etc.); -l
é para linhas:
$ wc -l file.txt
1020 file.txt
Tenho certeza de que há muitas maneiras de fazer isso: como posso contar o número de linhas em um arquivo de texto?
$ <cmd> file.txt
1020 lines
Como Michael disse, wc -l
é o caminho a percorrer. Mas, caso você tenha inexplicavelmente bash
, perl
ou awk
, mas não wc
, aqui estão mais algumas soluções:
$ LINECT=0; while read -r LINE; do (( LINECT++ )); done < file.txt; echo $LINECT
$ perl -lne 'END { print $. }' file.txt
e muito menos legível:
$ perl -lne '}{ print $.' file.txt
$ awk 'END {print NR}' file.txt
Steven D esqueceu o GNU sed
:
sed -n '$=' file.txt
Além disso, se você quiser a contagem sem gerar o nome do arquivo e estiver usando wc
:
wc -l < file.txt
Apenas por isso:
cat -n file.txt | tail -n 1 | cut -f1
Palavra de aviso ao usar
wc -l
porque wc -l funciona contando \ n, se a última linha do seu arquivo não terminar em uma nova linha, efetivamente a contagem de linhas será desativada em 1. (daí a antiga convenção deixando a nova linha no final do seu arquivo )
Como nunca posso ter certeza se algum arquivo segue a convenção de terminar a última linha com uma nova linha ou não, eu recomendo usar qualquer um desses comandos alternativos que incluirão a última linha na contagem, independentemente da nova linha ou não.
sed -n $= filename
perl -lne 'END { print $. }' filename
awk 'END {print NR}' filename
grep -c '' filename
No caso de você ter apenas bash e absolutamente nenhuma ferramenta externa disponível, você também pode fazer o seguinte:
count=0
while read
do
((count=$count+1))
done <file.txt
echo $count
Explicação: o loop lê a entrada padrão linha a linha ( read
; já que não fazemos nada com a entrada de leitura, nenhuma variável é fornecida para armazená-la) e aumenta a variável count
a cada vez. Devido ao redirecionamento ( <file.txt
após done
), a entrada padrão para o loop é de file.txt
.
Você sempre pode usar o comando grep
da seguinte forma:
grep -c "^" file.txt
Ele contará todas as linhas reais de file.txt
, mesmo que sua última linha contenha um caractere LF no final.
Tags command-line