desenv-web-rp.com

Como contar linhas em um documento?

Eu tenho linhas como essas e quero saber quantas linhas eu realmente tenho ...

09:16:39 AM  all    2.00    0.00    4.00    0.00    0.00    0.00    0.00    0.00   94.00
09:16:40 AM  all    5.00    0.00    0.00    4.00    0.00    0.00    0.00    0.00   91.00
09:16:41 AM  all    0.00    0.00    4.00    0.00    0.00    0.00    0.00    0.00   96.00
09:16:42 AM  all    3.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00   96.00
09:16:43 AM  all    0.00    0.00    1.00    0.00    1.00    0.00    0.00    0.00   98.00
09:16:44 AM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
09:16:45 AM  all    2.00    0.00    6.00    0.00    0.00    0.00    0.00    0.00   92.00

Existe uma maneira de contar todos eles usando comandos do Linux?

917
Alucard

Use wc:

wc -l <filename>

Isto irá mostrar o número de linhas em <filename>:

$ wc -l /dir/file.txt
3272485 /dir/file.txt

Ou, para omitir o <filename> do resultado use wc -l < <filename>:

$ wc -l < /dir/file.txt
3272485

Você também pode enviar dados para wc:

$ cat /dir/file.txt | wc -l
3272485
$ curl yahoo.com --silent | wc -l
63
1724
user85509

Para contar todas as linhas, use:

$ wc -l file

Para filtrar e contar apenas linhas com uso de padrão:

$ grep -w "pattern" -c file  

Ou use -v para inverter o jogo:

$ grep -w "pattern" -c -v file 

Veja a página man grep para dar uma olhada nos argumentos -e, -i e -x ...

130
Lauro Oliveira
wc -l <file.txt>

Ou

command | wc -l
67
John Kugelman

existem muitos caminhos. usando wc é um.

wc -l file

outros incluem

awk 'END{print NR}' file

sed -n '$=' file (GNU sed)

grep -c ".*" file
42
ghostdog74

A ferramenta wc é o "contador de palavras" em sistemas operacionais UNIX e UNIX, você também pode usá-lo para contar linhas em um arquivo, adicionando a opção -l, então wc -l foo contará o número de linhas em foo. Você também pode canalizar a saída de um programa como este: ls -l | wc -l, que informará quantos arquivos estão no diretório atual.

25
theunamedguy

Se você quiser verificar a linha total de todos os arquivos em um diretório, você pode usar find e wc:

find . -type f -exec wc -l {} +
22
storen

Use wc:

wc -l <filename>
21
Vivin Paliath

Se tudo que você quer é o número de linhas (e não o número de linhas e o nome do arquivo estúpido voltando):

wc -l < /filepath/filename.ext

Como mencionado anteriormente, estes também funcionam (mas são inferiores por outras razões):

awk 'END{print NR}' file       # not on all unixes
sed -n '$=' file               # (GNU sed) also not on all unixes
grep -c ".*" file              # overkill and probably also slower
14
ggb667

Eu tenho usado isso:

cat myfile.txt | wc -l

Eu prefiro a resposta aceita porque ela não imprime o nome do arquivo, e você não precisa usar o awk para corrigir isso. Resposta aceita:

wc -l myfile.txt

Mas acho que o melhor é a resposta do GGB667:

wc -l < myfile.txt

Eu provavelmente vou usar isso a partir de agora. É ligeiramente mais curto que o meu caminho. Eu estou colocando a minha maneira antiga de fazê-lo no caso de alguém preferir. A saída é a mesma com esses dois métodos.

7
Buttle Butkus

Use nl assim:

nl filename

De man nl:

Escreva cada FILE na saída padrão, com números de linha adicionados. Sem FILE, ou quando FILE é -, leia a entrada padrão.

7
decimal

Eu vi essa pergunta enquanto estava procurando uma maneira de contar várias linhas de arquivos, então se você quiser contar várias linhas de arquivo de um arquivo .txt você pode fazer isso,

cat *.txt | wc -l

também será executado em um arquivo .txt;)

5
talsibony

Acima está o método preferido, mas o comando "cat" também pode ser útil:

cat -n <filename>

Vai mostrar todo o conteúdo do arquivo com números de linha.

5
Yogesh
wc -l file.txt | cut -f3 -d" "

Retorna apenas o número de linhas

4
Umur Kontacı
cat file.log | wc -l | grep -oE '\d+'
  • grep -oE '\d+': Para retornar os números dos dígitos ONLY.
4
AechoLiu

Redirecionamento/Piping a saída do arquivo para wc -l deve ser suficiente, como o seguinte:

cat /etc/fstab | wc -l

que então forneceria o não. apenas de linhas.

3
tk3000

Ou conte todas as linhas em subdiretórios com um padrão de nome de arquivo (por exemplo, arquivos de log com registros de data e hora no nome do arquivo):

wc -l ./**/*_SuccessLog.csv
2
jwebuser

Eu sei que isso é antigo mas ainda: Contagem de linhas filtradas

Meu arquivo parece:

Number of files sent
Company 1 file: foo.pdf OK
Company 1 file: foo.csv OK
Company 1 file: foo.msg OK
Company 2 file: foo.pdf OK
Company 2 file: foo.csv OK
Company 2 file: foo.msg Error
Company 3 file: foo.pdf OK
Company 3 file: foo.csv OK
Company 3 file: foo.msg Error
Company 4 file: foo.pdf OK
Company 4 file: foo.csv OK
Company 4 file: foo.msg Error

Se eu quiser saber quantos arquivos foram enviados OK:

grep "OK" <filename> | wc -l

OR

grep -c "OK" filename
2

Acabei de fazer um programa para fazer isso (com node)

npm install gimme-lines
gimme-lines verbose --exclude=node_modules,public,vendor --exclude_extensions=html

https://github.com/danschumann/gimme-lines/tree/master

1
Funkodebat

conte o número de linhas e armazene o resultado na variável use este comando:

count=$(wc -l < file.txt) echo "Number of lines: $count"

1
Konstantin F

Como outros disseram wc -l é a melhor solução, mas para referência futura você pode usar Perl:

Perl -lne 'END { print $. }'

$. contém o número da linha e o END o bloco será executado no final do script.

0
Majid Azimi