script de shell que cuenta las líneas que se encuentran en los valores del rango

script de shell que cuenta las líneas que se encuentran en los valores del rango

Tengo esto :

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

Mi archivo de texto:nombre: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

Estoy tratando de contar el número de líneas en las que el valor de la quinta columna está en el rango de 0 a 999.

Cuando intento ejecutar, me da cuenta de 3 donde debería ser 6.

Respuesta1

Sus números de dos dígitos no coinciden con la expresión regular [0-9][0-9][0-9].

Además, almacenar un archivo en una variable y luego imprimirlo echoes unaen realidadmala idea. Ver¿Por qué printf es mejor que echo?, pero lo que es aún más importante, puedes hacerlo cat fileen lugar del echocomando.

En realidad, puedes hacer todo con Awk y luego ni siquiera necesitas cat. Como no muestra ningún número negativo, simplemente comprobaré "menos de mil".

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

información relacionada