Eu tenho um arquivo de dados que contém 6500 linhas e 2 colunas:
1ES9 0.927536231884058
1ET1 1.0
1EU1 0.8915343915343915
... ... ...
Eu quero contar as ocorrências de 1.0 no arquivo.
Eu usei o seguinte grep
comando e a saída foi 1001:
grep -o '1.0' data_file.txt | wc -l
Então, executei a ferramenta do Notepad ++ Find->Count
no Windows 10. Deu 144.
Por que isso é diferente com grep
?
grep
usa expressões regulares por padrão e “1.0” é uma expressão regular que corresponde a “1” seguido por qualquer caractere seguido por “0”. No seu exemplo, a linhaproduziria uma correspondência para “1 0”.
Para contar com precisão as ocorrências “1.0”, você deve pedir
grep
para pesquisar por strings fixas:ou "escape" do ponto para que ele corresponda a um ponto:
Se você quiser contar apenas 1.0 como valores, e não substrings ( por exemplo , em “11.002”), você deve pedir
grep
para combinar apenas palavras:Você também não precisa se envolver
wc
, pois só está interessado em uma correspondência por linha egrep
pode contar linhas:Isso ainda corresponderá a “-1.0”, já que “-” é um caractere que não é de palavra; se isso for um problema, você pode estender o padrão e parar de procurar palavras:
ou use uma ferramenta como AWK para corresponder ao valor numérico:
(adicionando 0 forças
$2
para ser interpretado como um número).