shell script contando as linhas que atendem aos valores do intervalo

shell script contando as linhas que atendem aos valores do intervalo

Eu tenho isto :

 S=`cat sales.txt`;
    echo "$S" | cut -d: -f5 | grep -E '[0-9][0-9][0-9]' | wc -l

Meu arquivo de texto:nome:id:número:tipo:valor

Tom:8:987654:A:67           //1
Dick:9:7651:B:83            //2
Harry:5:21215121:A:92       //3
Molly:2:1231872231:A:44     //4
Megan:123:322:B:145         //5
Russia:8:99231272:B:530     //6
Boleh:123:29321831:C:5000   //7

Estou tentando contar o número de linhas em que o valor da 5ª coluna está no intervalo de 0-999.

Quando tento executar, recebo uma contagem de 3 onde deveria ser 6.

Responder1

Seus números de dois dígitos não correspondem ao regex [0-9][0-9][0-9].

Além disso, armazenar um arquivo em uma variável e depois imprimi-lo echoé uma tarefarealmentepéssima ideia. VerPor que printf é melhor que echo?, mas ainda mais direto ao ponto, você pode simplesmente fazer cat fileno lugar do echocomando.

Na verdade, você pode fazer tudo com o Awk e nem precisa do cat. Como você não mostra nenhum número negativo, farei apenas uma verificação de "menos de mil".

awk -F: '$5 < 1000 {a++} END {print a}' sales.txt

informação relacionada