Isso conta o número de uns e zeros em filename
:
$ sort <filename | uniq -c
5 0
5 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.
Isso conta o número de uns e zeros em filename
:
$ sort <filename | uniq -c
5 0
5 1
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}'
Exclua tudo menos 0 e imprima as contagens de caracteres:
tr -cd 0 < file | wc -m
Saída:
5
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
Ed, cara! ! man ed:
$ ed -s file <<EOT
g/0/d
n
u
g/1/d
n
EOT
13 1
17 0
perl -n0E 'say tr/0//, "+",tr/1//'
ou após a tentativa do OP:
awk -v RS=1 'END{print NR-1}'
Tags text-processing awk sed