ti-enxame.com

contar linhas em um arquivo

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
75
Chris Smith

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
109
Michael Mrozek

Como Michael disse, wc -l é o caminho a percorrer. Mas, caso você inexplicavelmente tenha bash, Perl ou awk mas não wc, aqui estão mais algumas soluções:

Apenas Bash

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

Soluções Perl

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

e o muito menos legível:

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

Solução Awk

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

Steven D esqueceu 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 para os pedaços dele:

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

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 da linha será desativada em 1. (daí a convenção antiga que deixa 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, 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
11
pretzels1337

Caso você tenha apenas o 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 por linha (read; como não fazemos nada com a entrada de leitura de qualquer maneira, nenhuma variável é fornecida para armazená-la) e aumenta a variável count cada vez . Devido ao redirecionamento (<file.txt após done), a entrada padrão para o loop é de file.txt.

3
celtschk

Você sempre pode usar o comando grep da seguinte maneira:

grep -c "^" file.txt

Contará todas as linhas reais de file.txt, se sua última linha contém ou não um caractere LF no final.

2
Paolo