Conte o número de 0 e 1 em um arquivo [duplicado]

1

Eu tenho um arquivo (veja abaixo), e gostaria de contar o número de 1s e 0s:

1
1
1
0
0
1
1
0
0
0
...

Eu tentei usar o awk, mas não funciona, por exemplo, para contar o número de 1s:

awk -F "1\n" '{print NF-1}'

Como devo fazer isso?

Eu assumo que o arquivo contém somente 1's e 0s, e cada linha é apenas um único número. Mas eu gosto mais de saber como generalizar o caso para contar as ocorrências de uma linha específica em um arquivo.

    
por Tim 22.04.2015 / 20:15

6 respostas

5

Isso conta o número de uns e zeros em filename :

$ sort <filename | uniq -c
      5 0
      5 1
    
por 22.04.2015 / 20:27
3

com awk :

awk '/0/{zero++} /1/{one++} END{printf "0: %d\n1: %d\n", zero, one}' filename

Com grep , precisando de dois comandos:

grep -c 1 filename
grep -c 0 filename

Para uma string que cubra toda a linha:

grep -cFx 'target string' filename

Presumivelmente, sua string pode conter caracteres com significado especial na regex, portanto, precisamos usar -F . -x especifica que toda a linha deve corresponder.

com o awk:

awk '$0 == "target string" {count++} END {print count}'
    
por 22.04.2015 / 20:19
1

Exclua tudo menos 0 e imprima as contagens de caracteres:

tr -cd 0 < file | wc -m

Saída:

5
    
por 22.04.2015 / 20:31
1

Outra possibilidade é grep para linhas que correspondem exatamente a "0" (ou "1") e contar as linhas resultantes:

grep "^0$" filename | wc -l

= > 5

grep "^1$" filename | wc -l

= > 5

Ou conte as duas alternativas em um único grep:

grep "^[01]$" filename | wc -l

= > 10

    
por 22.04.2015 / 21:45
1

Ed, cara! ! man ed:

$ ed -s file <<EOT
g/0/d
n
u
g/1/d
n
EOT

13  1
17  0
    
por 22.04.2015 / 21:58
1
perl -n0E 'say tr/0//, "+",tr/1//'

ou após a tentativa do OP:

awk -v RS=1 'END{print NR-1}'
    
por 22.04.2015 / 22:02