/
na expressão aritmética executa uma divisão inteira, ou seja, é o operador de quociente. A maioria das shells só pode fazer aritmética inteira, não aritmética de ponto flutuante.
Em vez de dividir pelo total e depois multiplicar por 100, faça o oposto. Enquanto você está nisso, grep … | wc -l
pode ser simplificado para grep -c
.
Além disso, grep '1.'
está errado: ele seleciona todas as linhas que contêm 1
seguido por outro caractere, ou seja, linhas que contêm 1
em algum outro lugar que não seja o final da linha. Para selecionar linhas com um número entre 10 k + 1 e 10 k + 2, use grep '1\.'
. Para selecionar linhas que contenham um número maior que 1, use grep '[1-9][0-9]*\.'
.
Observe que grep .
seleciona linhas não vazias. Para selecionar todas as linhas, use wc -l
. Para selecionar apenas linhas que tenham um número, use algo como grep '[0-9]'
(isso inclui linhas com um dígito em qualquer lugar, não apenas uma linha contendo apenas um número).
if [ $(($(grep -c '[1-9][0-9]\.' <"$file") * 100 / $(grep -c '[0-9]' <"$file"))) -ge 10 ]; then
Seria potencialmente mais rápido e mais robusto processar o arquivo apenas uma vez e contar os números conforme eles chegam. Você pode fazer isso com o awk.
if awk '
$0 >= 1 {good += 1}
$0 != 0 || $0 ~ /^ *0*\.0*$/ {total += 1}
END {if (good < total/10) exit(1)}
'; then