Подсчет ненужных слов (Unix) с помощью grep - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь подсчитать, сколько раз слово «огонь» и «вода» появляется в последнем слове каждой строки

$cat file 
red,Fire
blue,water 
Fire red, Fire

Мое решение:

$grep -Ewo "Fire" <file> | sort | uniq -c

вывод, который я получаю:

$Fire 3
$Water 1

Что я ожидал получить:

$Fire 2
$Water 1 

1 Ответ

0 голосов
/ 31 октября 2018

Шаблон, который вы передаете grep, не соответствует вашим требованиям. Fire просто означает эти буквы в указанном порядке в любом месте строки.

Вы включаете параметр -w, который ограничивает его появление в виде отдельного слова, но он все еще может находиться в любом месте строки. С man grep в моей системе:

-w, --word-regexp
Выберите только те строки, которые содержат совпадения, которые образуют целые слова. Тест состоит в том, что соответствующая подстрока должна быть либо в начале строки, либо предшествовать не состоящему из слова символу. Точно так же он должен быть либо в конце строки, либо следовать за символом, не входящим в состав слова. Составляющие слова символы - это буквы, цифры и знак подчеркивания.

Обычно каждая строка либо повторяется в выводе, либо скрывается, но вы включаете опцию -o. С man grep в моей системе:

-o, --only-match
Печатайте только совпадающие (непустые) части совпадающей строки, каждая из которых находится на отдельной выходной строке.

Обратите внимание, в частности, на последнее предложение: если совпадают несколько частей строки, они все будут выводиться как отдельные строки вывода .

Сравните:

# Match all three words, and output the line if it matches
$ echo 'one two three' | grep -E 'one|two|three'
one two three

# Match all three words, and output the matching parts
$ echo 'one two three' | grep -Eo 'one|two|three'
one
two
three

Итак, ваша команда говорит вам, что слово «огонь» появляется в общей сложности три раза, игнорируя, где в строке или сколько раз в каждой строке.

Чтобы ограничить его только совпадением в конце строки , добавьте $ в выражение:

grep -Ewo 'Fire$'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...