Eu tenho linhas como essas e quero saber quantas linhas 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 linux?
linux
bash
command-line
scripting
Alucard
fonte
fonte
g <Ctrl-g>
, Ela vai mostrar número de linhas, palavras, colunas e bytes<esc> :q!
é a única resposta. (Isso é uma piada, isso excluirá todas as alterações não salvas - a piada é que, se você não conhece o vim, é fácil bagunçar um arquivo, é melhor não salvá-lo).Respostas:
Use
wc
:Isso produzirá o número de linhas em
<filename>
:Ou, para omitir
<filename>
o resultado, usewc -l < <filename>
:Você também pode canalizar dados para
wc
:fonte
wc -l <file> | awk '{print $1}
wc -l < <filename>
cat <file> | wc -l
watch wc -l <filename>
você pode acompanhar esse arquivo em tempo real. Isso é útil para arquivos de log, por exemplo.Para contar todas as linhas, use:
Para filtrar e contar apenas linhas com padrão, use:
Ou use -v para inverter a correspondência:
Consulte a página do manual grep para ver os argumentos -e, -i e -x ...
fonte
grep -c
funciona melhor para mim. Principalmente devido aowc -l
prefixo de espaço de preenchimento "recurso" irritante.Ou
fonte
existem muitos caminhos. usando
wc
é um.wc -l file
outros incluem
awk 'END{print NR}' file
sed -n '$=' file
(GNU sed)fonte
wc -l file
fornece o número de linhas E o nome do arquivo para obter apenas o nome do arquivo que você pode fazer:filename.wc -l < /filepath/filename.ext
grep -Hc ".*" file
wc -l
conta caracteres de nova linha e não as linhas reais de um arquivo. Todos os outros comandos incluídos nesta resposta fornecerão o número certo, caso você precise das linhas.A ferramenta
wc
é o "contador de palavras" nos sistemas operacionais UNIX e UNIX, mas você também pode usá-lo para contar linhas em um arquivo, incluindo o-l
opçãowc -l foo
contará o número de linhas emfoo
. 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 (mais um).fonte
ls -l | wc -l
realmente fornecerá o número de arquivos no diretório +1 para a linha de tamanho total. você pode fazerls -ld * | wc -l
para obter o número correto de arquivos.Se você deseja verificar a linha total de todos os arquivos em um diretório, pode usar find e wc:
fonte
Use
wc
:fonte
Se tudo o que você deseja é o número de linhas (e não o número de linhas e o nome estúpido do arquivo retornando):
Como mencionado anteriormente, eles também funcionam (mas são inferiores por outros motivos):
fonte
Use
nl
assim:De
man nl
:fonte
wc -l
informa como 0. Obrigado.Eu tenho usado isso:
Prefiro que a resposta aceita, porque não imprime o nome do arquivo e você não precisa
awk
corrigi-lo. Resposta aceita:wc -l myfile.txt
Mas acho que o melhor é a resposta do GGB667:
wc -l < myfile.txt
Provavelmente vou usar isso a partir de agora. É um pouco mais curto que o meu caminho. Estou colocando minha maneira antiga de fazê-lo, caso alguém prefira. A saída é a mesma com esses dois métodos.
fonte
Acima estão o método preferido, mas o comando "cat" também pode ser útil:
Irá mostrar todo o conteúdo do arquivo com números de linha.
fonte
Vi essa pergunta enquanto procurava uma maneira de contar várias linhas de arquivos. Portanto, se você quiser contar várias linhas de um arquivo .txt, poderá fazer isso,
também será executado em um arquivo .txt;)
fonte
wc -l
não conta linhas.Sim, essa resposta pode ser um pouco atrasada para a parte, mas ainda não encontrei ninguém documentando uma solução mais robusta nas respostas.
Ao contrário da crença popular, o POSIX não exige que os arquivos terminem com um caractere de nova linha. Sim, a definição de uma linha POSIX 3.206 é a seguinte:
No entanto, o que muitas pessoas desconhecem é que o POSIX também define a Linha Incompleta do POSIX 3.195 como:
Portanto, os arquivos sem rastro
LF
são perfeitamente compatíveis com POSIX.Se você optar por não oferecer suporte aos dois tipos de EOF, seu programa não é compatível com POSIX.
Como um exemplo, vamos dar uma olhada no seguinte arquivo.
Não importa o EOF, tenho certeza que você concorda que há duas linhas. Você descobriu isso olhando para quantas linhas foram iniciadas, não para quantas linhas foram terminadas. Em outras palavras, conforme o POSIX, esses dois arquivos têm a mesma quantidade de linhas:
A página de manual é relativamente clara sobre a
wc
contagem de novas linhas, com uma nova linha sendo apenas um0x0a
personagem:Portanto,
wc
nem tente contar o que você pode chamar de "linha". Usarwc
para contar linhas pode muito bem levar a contas incorretas, dependendo do EOF do seu arquivo de entrada.Solução compatível com POSIX
Você pode usar
grep
para contar linhas, como no exemplo acima. Essa solução é mais robusta e precisa e suporta todos os diferentes tipos de linhas que podem ser no seu arquivo:fonte
grep -oE '\d+'
: Para retornar os números dos dígitos APENAS .fonte
Retorna apenas o número de linhas
fonte
Redirecionar / canalizar a saída do arquivo para
wc -l
deve ser suficiente, como o seguinte:que então forneceria o não. somente de linhas.
fonte
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):
fonte
Sei que isso é antigo, mas ainda assim: conte linhas filtradas
Meu arquivo se parece com:
Se eu quiser saber quantos arquivos foram enviados, clique em OK:
OU
fonte
Para contar o número de linhas e armazenar o resultado na variável, use este comando:
count=$(wc -l < file.txt) echo "Number of lines: $count"
fonte
Como outros disseram,
wc -l
é a melhor solução, mas para referência futura você pode usar o Perl:$.
contém o número da linha e oEND
bloco será executado no final do script.fonte
dir | perl -lne 'END { print $. }' Can't find string terminator "'" anywhere before EOF at -e line 1.'
perl -lne '}{ print $. '
faz o mesmo.Acabei de criar um programa para fazer isso (com
node
)https://github.com/danschumann/gimme-lines/tree/master
fonte
wc -l <filename>
Isso fornecerá o número de linhas e o nome do arquivo na saída.
Por exemplo.
wc -l 24-11-2019-04-33-01-url_creator.log
Resultado
63 24-11-2019-04-33-01-url_creator.log
Usar
wc -l <filename>|cut -d\ -f 1
para obter apenas o número de linhas na saída.
Por exemplo.
wc -l 24-11-2019-04-33-01-url_creator.log|cut -d\ -f 1
Resultado
63
fonte
wc -l < filename
wc -l < filename
é diferentewc -l filename
, o primeiro redirecionamento usos e então não há qualquer nome de arquivo na saída, como mostrado na resposta de user85509Essa função de shell portátil suspensa [ℹ] funciona como um encanto. Basta adicionar o seguinte trecho ao seu
.bashrc
arquivo (ou o equivalente ao seu ambiente shell) .Isso deve ser totalmente compatível com todos os shells compatíveis com POSIX, além do bash e zsh .
fonte