sed + считать слова в поле 3 - PullRequest
1 голос
/ 29 июня 2010

Я использовал следующий awk для подсчета всех слов, которые появляются в поле 4

  awk '{print $4}'  file | awk '{print NF}' | grep -c 1

Как мы можем к тому же в седе?

Пример файла:

 1 2 3 4
 1 2 
 1 2 3 4 5
 1 2
 1 2 3
 1 2 3 4

Из файла sed должен возвращаться результат 3 (три слова в поле 4)

Яэль

Ответы [ 3 ]

1 голос
/ 29 июня 2010

Прежде всего, ваш 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 полей.

0 голосов
/ 13 декабря 2011

Это может работать для вас:

sed 's/ *[^ ]*/&/4;t;d;' file | sed -n '$='
0 голосов
/ 29 июня 2010

cut также можно использовать:

cut -f 5 -d' ' file | wc -w

Выберите столбец 5. (первый пустой из-за пробела в начале)Разделителем является пробел.

...