LINUX.ORG.RU

Поиск и подсчет найденных слов в большом текстовом файле.


0

1

Приветствую вас дорогие форумчани! У меня есть задача и для того чтобы решить ее я нуждаюсь в Вашей помощи. Работаю в debian, без использования графического интерфейса. Задача: Есть большой текстовый файл и нужно посчитать сколько раз встречаются определенные слова в тексте.

Сейчас объясню на примере, что бы было понятнее. Допустим есть такой текст "Команда ls для каждого имени каталога распечатывает список входящих в этот каталог файлов. Команда ls отображает список файлов. Этот список очень длинный. " Так вот мне нужно найти например слова "ls", "файлов", "список" и узнать сколько раз встречались в тексте эти слова. То есть результат должен быть примерно таким:

ls 2 (раза)
файлов 2 (раза)
список 3 (раза)

Заранее спасибо!

Ну, через grep, sed, wc и их комбинации можно, я думаю. Точнее не скажу, щас кто придет пошаристее, скажет как именно.

deep-purple ★★★★★
()

awk

    { for (i = 1; i <= NF; i++) words[$i]++ }
END { print "ls", words["ls"] }

Единственное что - большой расход памяти, если разных слов много, и надо что-то делать со знаками препинания, которые приклеятся к словам. Но суть, надеюсь, ясна.

yoghurt ★★★★★
()
Ответ на: комментарий от deep-purple

Я нашел ответ, но только для 1 слово

Я нашел ответ, но только для 1 слово:
grep -o 'слово' name_file.txt | uniq -c

Результат:
32 слово

А как вывести сразу для всех слов, пока что незнаю.

sergiu920
() автор топика
Ответ на: Я нашел ответ, но только для 1 слово от sergiu920

Такой подход не годится: будет по одной строчке выводиться → если в одной строке будет больше одного слова, фигвам.

Лучше так сделай:

echo -e "Какой-то дурацкий текст и дурацкий скрипт\nбудет по-дурацки считать дурацкий слово"|sed 's/дурацкий/дурацкий\n/g'|grep -o дурацкий|wc -l
3

Eddy_Em ☆☆☆☆☆
()

Удалить знаки препинания, переформатировать текст в одно слово на строчку, дальше всё очевидно, тривиально и скучно

zolden ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.