Подсчет количества вхождений слова в текстовом файле. Linux статьи
Написать статью
Войдите, чтобы писать статьи

Подсчет количества вхождений слова в текстовом файле

5

Подсчет количества вхождений слова в файле

Когда вы работаете с текстовым файлом в графическом редакторе, то можно увидеть количество вхождений слова, используя статистику, если она предоставляется редактором или, например, нажать Ctrl+F и увидеть количество найденных вхождений.

Иногда нужно выполнить подсчет вхождений слова или символов в файле, используя командую строку. Рассмотрим, как это можно сделать.

Используем grep | wc

Предположим, что у нас есть файл myfile.txt со следующим содержимым:

Файл, который содержит произвольный текст. По содержимому данного файла мы будем искать вхождения слова текст. Слово текст здесь должно встретиться три раза.

Воспользуемся командой grep и найдем вхождение слова «текст» в файле myfile.txt:

grep -o -i текс myfile.txt | wc -l

В результате будет выведено:

3

grep Подсчет количества вхождений

Описание команды:
Команда grep выполняет поиск слова «текст» в файле myfile.txt.
Опция -i — игнорировать регистр символов.
Опция -o — используется, чтобы возвращалось само найденное слово. Каждое найденное слово выводится на отдельной строке (в нашем случае каждое слово передается команде wc).

Далее вывод команды grep направляется команде wc, так как используется оператор вертикальной черты | (конвейер).

Команда wc (от «word count») с опцией -l выполняет подсчет количества строк. То есть в нашем случае количество, найденных командной grep, слов.

Используем tr | grep

Для разнообразия воспользуемся еще одной командой, которая также выполняет подсчет количества вхождений строки в текстовом файле:

tr '[:space:]' '[\n*]' < myfile.txt | grep -i -c текст

В результате будет выведено:

3

tr Подсчет количества вхождений

Описание команды:
Мы воспользовались командой tr (от «translate» или «transliterate»), которая используется для преобразования одних символов в другие. В нашем случае мы командной tr разбиваем файл на строки: все пробельные символы ([:space:]) заменяются на символ новой строки ([\n*]).

Затем вывод команды tr направляется команде grep, так как используется конвейер |

Опция -c команды grep считает количество строк.


Еще один пример

Обращаю внимание на то, что описанные выше команды, ищут не отдельное слово, а именно вхождение слова (вхождение символов) в тексте. То есть, если в тексте встречается строка вида «Это хорошие помидоры», и мы ищем вхождение слова «помидор», то получим в результате одно вхождение, так как в нашем тексте есть эти символы.

Приведем пример. Выполним поиск в следующем файле:

Еще один файл, в котором будет выполнен поиск слова пингвинус. При выполнении поиска будут учитываться все вхождения последовательности символов "пингвинус", например, пингвинусу, Пингвинуса, Пингвинус.ру.
grep -o -i пингвинус myfile2.txt | wc -l

В результате будет выведено:

5

grep Подсчет количества вхождений

Аналогично командой tr 

tr '[:space:]' '[\n*]' < myfile2.txt | grep -i -c пингвинус

В результате будет выведено:

5

tr Подсчет количества вхождений


Источник: link

Заключение

Мы рассмотрели, как можно посчитать количество вхождений определенных символов в текстовом файле, используя командую строку. Вы также познакомились с некоторыми возможностями команд grep, wc и tr, и перенаправлением результата одной команды на вход другой — конвейером |

Лайков: +5
войдите, чтобы ставить лайки
5
  • Опубликовано: 17.02.2020

Комментарии

Денис
17.02.2020
15:00
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
А почему бы не использовать один только grep?
grep -ico "искомое слово" file_name.txt
Денис
17.02.2020
15:10
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
А если речь идет о редакторе, пусть и графическом, то можно в консольном vim'е или графическом gvim'е (или даже в vi):
в командном режиме (коммандный режим - shit+; - т.е. шифт + :)
%s/искомое_слово//gn
% - весь файл (а можно указать диапазон строк, т.н. range, 100,254 - начиная с сотой сроки до двухсот пятьдесятчетветой)
s - подстановка (substitute)
/ - разделитель - что ищем и на что заменяем, т.е. ни на что - после второго разделителя пусто
g - global (глобально)
n - none (или что-то иное обозначает, в любом случае это нужное действие, а именно - бездействие, т.е. ничего не удаляет)
tigr72
Активный пользователь
Активный
17.02.2020
16:55
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
Для LibreOffice есть плагин https://extensions.libreoffice.org/extensions/alternative-dialog-find-replace-for-writer

зы Работает и на LibreOffice 6.4 ...
Linuxoid
Активный пользователь
Активный
25.10.2020
11:18
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
0
войдите, чтобы ставить лайки
Спасибо большое! Очень помогло!
Денис
08.01.2024
23:24
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
0
войдите, чтобы ставить лайки
А как быть если указан не файл, а все файлы в текущей директории(*)?
grep текст *
В таком случае wc ничего не считает

Написать комментарий

Ваше имя:
Текст комментария:
  • Уважать других.
  • Не ругаться.
  • Без оскорблений.
  • Без грубости.
  • Не переходить на личности.
  • Писать на русском языке.
  • Без политики.
  • Без флуда.
Правила