Contando linhas sem texto em um arquivo

5

Estou usando o Ubuntu 13.10 há algum tempo, programando em C ++ e Python. Eu tenho algumas perguntas que posso resolver fazendo um programa, mas talvez haja maneiras mais fáceis, então aqui está a primeira pergunta.

Eu posso usar grep para encontrar linhas com uma palavra / padrão e, em seguida, usar wc para contá-las:

grep word somefile | wc -l

Como faço para contar as linhas que não têm "texto"? Aqueles que estão vazios ou possuem apenas espaços ou tabulações.

    
por user59952 09.02.2014 / 09:45

2 respostas

8

Seu sistema deve ter o GNU grep, que possui uma opção -P para usar expressões Perl e você pode usá-lo, combinado com -c (portanto, não é necessário usar wc -l ):

grep -Pvc '\S' somefile

O '\S' entrega o padrão \S ao grep e corresponde a toda a linha contendo qualquer coisa que não seja espaço, -v seleciona todas as outras linhas (aquelas apenas com espaço) e -c as conta.

Na página man do grep:

-P, --perl-regexp
       Interpret  PATTERN  as  a  Perl  regular  expression  (PCRE, see
       below).  This is highly experimental and grep  -P  may  warn  of
       unimplemented features.

-v, --invert-match
       Invert the sense of matching, to select non-matching lines.  (-v
       is specified by POSIX.)

-c, --count
       Suppress normal output; instead print a count of matching  lines
       for  each  input  file.  With the -v, --invert-match option (see
       below), count non-matching lines.  (-c is specified by POSIX.)
    
por 09.02.2014 / 09:47
3

Você pode usar grep para isso:

$ grep -c '^[     ]*$' somefile

em que ^ / $ corresponde ao início / fim de uma linha e [ ] especifica a classe de caracteres que inclui caracteres de espaço e tabulação. * denota 0 a repetições ilimitadas do lado esquerdo.

A opção -c diz ao grep para contar as linhas que correspondem ao padrão - em vez de imprimi-las no terminal.

Note que em zsh eu tenho que pressionar Ctrl + V Tab para inserir um caractere de tabulação literal.

( [ \t] não é reconhecido por grep )

    
por 09.02.2014 / 12:23

Tags