quando o grep conta e quando não

0

A página de manual para grep diz:

-c, --count: Suppress normal output; instead print a count of matching lines for each input file.

dados:

# grep -R -c sleeping /proc/*/status

Eu recebo uma lista, não uma contagem (como com):

# grep -R sleeping /proc/*/status | wc -l

O que há com grep -c ? O que estou fazendo (nos comandos acima) para não obter uma contagem e ter que usar wc -l em vez disso?

    
por iletras 25.11.2017 / 19:49

2 respostas

3

grep -c fornece a contagem de linhas correspondentes para cada arquivo de entrada separadamente (é o que a sua cotação do manual diz, realmente):

$ grep -c user chmod.1 chown.1 
chmod.1:20
chown.1:5

Portanto, chmod.1 tem 20 correspondências, chown.1 tem 5.

A listagem de nomes de arquivos funciona da mesma forma aqui como em um grep normal, ou seja, os nomes de arquivos são listados se houver mais de um arquivo de entrada, mas não se houver apenas um. Pelo menos no GNU grep, isso pode ser modificado com as bandeiras -H e -h .

Então,

$ grep -c user chmod.1
20
$ grep -cH user chmod.1
chmod.1:20
    
por 25.11.2017 / 21:11
2

Para uma contagem total, use um uso talvez não tão inútil de cat , para que grep não relate as contagens por arquivo

-bash-4.2$ cat /proc/*/status | grep -c sleeping
171
-bash-4.2$ grep sleeping /proc/*/status | wc -l
171
-bash-4.2$ 
    
por 25.11.2017 / 19:57

Tags