Прежде всего, ваш awk
довольно неэффективен.Попробуйте это:
awk '$4{c++}END{print c}' file
Зачем вам это нужно в sed
, кстати?Это то, что awk
делает хорошо.Если вы действительно хотите это в sed
, я думаю, что-то вроде этого:
sed '/^\s*\S*\s*\S*\s*\S*\s*$/d' file | wc -l
awk
объяснение: в каждой строке, где четвертое поле не равно нулю, увеличивать cВ конце выведите c.
sed
пояснение: удалите каждую строку, соответствующую регулярному выражению.Затем с помощью wc
подсчитайте строки вывода sed
.Регулярное выражение в основном говорит, что в строке может быть максимум две группы пробелов, не считая начальных и конечных, что означает, что в строке может быть не более 3 полей.