Como posso descobrir quantas linhas um arquivo de texto contém sem visualizá-lo? [duplicado]

47

Como posso encontrar quantas linhas um arquivo de texto contém sem abrir o arquivo em um editor ou em um aplicativo visualizador? Existe um comando do console Unix para ver o número?

    
por Ivan 19.01.2012 / 05:22

5 respostas

72

Realmente existe. Ele é chamado de wc , originalmente para contagem de palavras, acredito, mas ele pode fazer linhas, palavras, caracteres, bytes (e com algumas implementações, o comprimento em bytes da linha mais longa ou a largura de exibição da maior). A opção -l diz para contar linhas (na verdade, conta os caracteres de nova linha, portanto, apenas linhas delimitadas corretamente):

wc -l mytextfile

Ou para produzir apenas o número de linhas:

wc -l < mytextfile

(lembre-se de que algumas implementações inserem espaços em branco antes desse número).

    
por 19.01.2012 / 05:28
11

Outra opção seria usar grep para encontrar o número de vezes que um padrão é correspondido:

grep --regexp="$" --count /path/to/myfile.txt

Neste exemplo,

  • $ é uma expressão que avalia uma nova linha (o botão enter é pressionado)
  • --count suprime a saída normal de correspondências e exibe o número de vezes que foi correspondido.
  • O /path/to/myfile.txt é bastante óbvio, espero:)

EDITAR: Como mencionado por @hesse nos comentários, isso pode ser encurtado para

grep -c $ path/to/file

O que também o tornaria padrão e portátil para implementações não-GNU grep .

    
por 19.01.2012 / 11:33
4

Também gostaria de acrescentar que é muito fácil fazer isso em awk puro se você, por algum motivo, não quiser usar wc .

$ awk 'END { print NR }' /path/to/file

O% acima é o número de registros ( print ) presentes no arquivo em NR .

Nota : ao contrário de /path/to/file , isso não imprimirá o nome do arquivo. Então, se você quisesse apenas o número, isso seria uma boa alternativa para wc .

    
por 24.08.2014 / 20:35
1

Como sugerido pelo @Kevin, você pode usar o comando wc para contar linhas em um arquivo. No entanto, wc -l test.txt incluirá o nome do arquivo no resultado. Você pode usar:

wc -l < test.txt

para obter apenas o número de linhas sem o nome do arquivo. Experimente.

    
por 16.04.2015 / 18:57
0

De acordo com o meu teste, posso verificar que o AWK é muito mais rápido do que as outras ferramentas (GREP, SED, AWK, PERL, WC)

Aqui está o resultado do teste que eu fiz aqui

date +%x_%H:%M:%S; grep -c $ my_file.txt; date +%x_%H:%M:%S; 

10/03 / 16_09: 41: 51 24579427 10/03 / 16_09: 42: 40 ~ 49 Segundos

date +%x_%H:%M:%S; wc -l my_file.txt; date +%x_%H:%M:%S; 

10/03 / 16_09: 35: 05 24579427 my_file.txt 10/03 / 16_09: 35: 45 ~ 40 segundos

date +%x_%H:%M:%S; sed -n '$=' my_file.txt; date +%x_%H:%M:%S; 

10/03 / 16_09: 33: 50 24579427 10/03 / 16_09: 34: 29 ~ 39 Segundos

date +%x_%H:%M:%S; perl -ne 'END { $_=$.;if(!/^[0-9]+$/){$_=0;};print "$_" }' my_file.txt; date +%x_%H:%M:%S; 

10/03 / 16_09: 36: 11 24579427 10/03 / 16_09: 36: 36 ~ 25 Segundos

date +%x_%H:%M:%S; awk 'END { print NR }' my_file.txt; date
+%x_%H:%M:%S; 

10/03 / 16_09: 43: 36 24579427 10/03 / 16_09: 43: 58 ~ 22 Segundos

    
por 03.10.2016 / 15:51