Como faço para contar linhas de texto?

13

Como faço para contar quantas linhas estão no arquivo de texto. por exemplo:

command file.txt

Note que quero contar apenas as linhas não vazias (linhas sem contar espaços em branco e tabulações)?.

    
por user93097373 19.03.2015 / 11:30

7 respostas

10

A resposta acima está correta, mas ligeiramente diferente, você pode usar o grep para facilitar o código, como grep -vc '^$' file.txt

Por exemplo (A): file.txt

$grep -vc '^$' file.txt

1    First line         #This is two tabs to comment.
2    
4
3    Fourth line        #Another two tabs to comment.


Por exemplo (B): arquivo.txt

$sed '/^$/d' file.txt | wc -l

1    First line         #This is two tabs to comment.
2    
4
3    Fourth line        #Another two tabs to comment.


Observe que o resultado é 4! quando queremos esperar apenas dois. mas isso conta as abas entre o conteúdo e o comentário também.

Observe as contagens a partir de 0 e conte a partir de 1, é diferente do grep para o sed, pois lembro-me, para mais detalhes, procure por grep ou sed.

    
por Baron 19.03.2015 / 12:11
12

Experimente sed :

sed '/^$/d' file.txt | wc -l

Se você tem linhas contendo apenas espaços ou tabulações e se deseja ignorá-las também da contagem:

sed '/^[[:blank:]]*$/d' file.txt | wc -l
    
por heemayl 19.03.2015 / 11:43
3

Usando grep :

grep -vc '^$' file  # or
grep -vc '^\s*$' file    
    
por muru 19.03.2015 / 11:49
3

Você pode usar:

grep -cve '^\s*$' file.txt

Se você precisar de um comando para isso, basta colar as seguintes linhas no seu .bashrc e reiniciar a sessão do shell ou abrir um novo terminal:

count_lines()
{
    grep -cve '^\s*$' 
}

Exemplo:

count_lines file.txt
42
    
por Sylvain Pineau 19.03.2015 / 11:51
2

Com awk :

awk 'NF{++count} END{print count}' file

Explicação:

O NF indica o número total de campos e, portanto, isso imprime apenas linhas não em branco , pois nas linhas não em branco NF é maior que 0 e é avaliado como verdadeiro . Então incremente o sinalizador count quando o awk encontrou linhas não em branco e imprime o último valor do sinalizador count no final por END{print count} .

    
por αғsнιη 19.03.2015 / 13:28
1

Editar : basta adicionar a opção c a grep em vez de enviar tudo para wc , veja a resposta de @ muru para uma versão mais compacta

com grep :

grep -v '^$' file.txt | wc -l
    
por kos 19.03.2015 / 11:48
0

Solução Perl

Perl pode fazer isso. Em geral, as linhas de contagem funcionam assim:

$ perl -ne 'END{print $.}' input.txt                                                                                     

Se quisermos excluir todas as linhas vazias, faremos algo assim:

$ perl -ne '$c+=1 if not /^$|^\s+$/;END{print $c}' input.txt                                                             

Digamos que temos um arquivo de entrada como este

$ cat -n input.txt
     1  Cat; Dog; Squirrel
     2  ORGANISM Animalus terrus
     3  
     4  Sequence: ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT
     5  

Existem 5 linhas no total, 2 linhas vazias. O comando que temos seria a saída:

$ perl -ne '$c+=1 if not /^$|^\s+$/;END{print $c}' input.txt                                                             
3

Melhoria em vários arquivos

Isso funciona bem para um único arquivo. Se quisermos que ele funcione em vários arquivos, podemos fazer algo assim:

$ perl -ne '$c+=1 if not /^$|^\s+$/;printf("%d %s\n",$c,$ARGV) and $c=0 if eof' input.txt /etc/passwd                    
3 input.txt
52 /etc/passwd
    
por Sergiy Kolodyazhnyy 02.06.2017 / 21:36