Existe uma maneira de descobrir o número de linhas de uma saída de comando?

1

Estou tentando comparar saídas de comando entre dois servidores. Eu quero descobrir o número de linhas da saída de comandos como ls -l . Tem algum jeito de fazer isso? Até agora eu não encontrei nada.

    
por Alias 16.06.2014 / 16:41

5 respostas

6

Para alguém, isso pode ser mais fácil de lembrar:

ls -l | grep . -c

Por favor, note que o grep e o wc contarão as linhas auxiliares como total 32044 ou ou ./dirname: . Para evitar isso, especialmente na saída recursiva, como ls -lR , tente isto:

find . -type f | grep . -c

onde primeiro . é o caminho do diretório e -type f significa que find listará apenas os arquivos. Se você precisar de todos os tipos (incluindo diretórios, soquetes, etc), então apenas omita -type f .

Por favor, note: wc -l NÃO conta linhas vazias (apenas '\ n') enquanto grep . -c - NÃO.

    
por 16.06.2014 / 16:56
5

Você deve usar wc :

$ wc -l .emacs.d/init.el 
73 .emacs.d/init.el

De man wc :

NAME
       wc - print newline, word, and byte counts for each file

SYNOPSIS
       wc [OPTION]... [FILE]...
       wc [OPTION]... --files0-from=F
       ....
       -l, --lines
              print the newline counts

wc faz parte de GNU coreutils , você pode tê-lo na maioria dos Unix-like system.

    
por 16.06.2014 / 16:44
4

você pode canalizar seu comando para o comando wc :

ls -l | wc -l
    
por 16.06.2014 / 16:43
2

Sim, você pode encontrar o número de linhas da saída do comando ls -l a awk também,

ls -l | awk 'END{print NR}'

Variável NR de Awk armazena o último número de registro no final ( Depois de ler todas as linhas de entrada ).

    
por 17.06.2014 / 02:44
1

Se você quiser comparar uma contagem dos arquivos processados por um dos servidores, faça isso de forma confiável:

ls -aR1qp ./ | grep -cv '/\|^$'

Isso lista recursivamente todos os arquivos - não diretórios - um por linha, incluindo .dotfiles abaixo do diretório atual, usando shell globs conforme necessário para substituir os caracteres não imprimíveis. grep filtra as listagens de diretório pai ou .. ou */ ou linhas em branco - portanto, deve haver apenas uma linha por arquivo - a contagem total de qual grep retorna para você. Se você quiser incluir diretórios filhos, faça o seguinte:

ls -aR1qp ./ | grep -cv '^\.\{1,2\}/\|^$'

ou ...

ls -AR1q ./ | grep -cv '/\|^$'

Observe que a opção -A para ls é POSIX na versão mais recente.

    
por 17.06.2014 / 01:12