
У меня есть это :
S=`cat sales.txt`;
echo "$S" | cut -d: -f5 | grep -E '[0-9][0-9][0-9]' | wc -l
Мой текстовый файл:имя:идентификатор:номер:тип:значение
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
Я пытаюсь подсчитать количество строк, в которых значение 5-го столбца находится в диапазоне 0-999.
Когда я пытаюсь бежать, он выдает мне счет 3, хотя должно быть 6.
решение1
Ваши двузначные числа не соответствуют регулярному выражению [0-9][0-9][0-9]
.
Кроме того, сохранение файла в переменной и последующая его печать echo
— этоДействительноплохая идея. СмотритеПочему printf лучше, чем echo?, но что еще важнее, вы можете просто сделать cat file
вместо echo
команды.
На самом деле, вы можете сделать все это с помощью Awk, и тогда вам даже не понадобится cat
. Поскольку вы не показываете никаких отрицательных чисел, я просто сделаю проверку на «меньше тысячи».
awk -F: '$5 < 1000 {a++} END {print a}' sales.txt