извлечь слова из файла - PullRequest
13 голосов
/ 14 июля 2009

Я пытаюсь создать словарь слов из коллекции файлов. Есть ли простой способ напечатать все слова в файле, по одному в строке?

Ответы [ 5 ]

25 голосов
/ 14 июля 2009

Вы можете использовать grep:

  • -E '\w+' ищет слова
  • -o печатает только ту часть строки, которая соответствует
% cat temp<i>
Some examples use "The quick brown fox jumped over the lazy dog,"
rather than "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
for example text.
</i><b># if you don't care whether words repeat</b>
% grep -o -E '\w+' temp<i>
Some
examples
use
The
quick
brown
fox
jumped
over
the
lazy
dog
rather
than
Lorem
ipsum
dolor
sit
amet
consectetur
adipiscing
elit
for
example
text
</i>

Если вы хотите напечатать каждое слово только один раз, независимо от регистра, вы можете использовать sort

  • -u печатает каждое слово только один раз
  • -f говорит sort игнорировать регистр при сравнении слов
<b># if you only want each word once</b>
% grep -o -E '\w+' temp | sort -u -f<i>
adipiscing
amet
brown
consectetur
dog
dolor
elit
example
examples
for
fox
ipsum
jumped
lazy
Lorem
over
quick
rather
sit
Some
text
than
The
use
</i>
3 голосов
/ 14 июля 2009

при условии, что слова разделены пробелами

awk '{for(i=1;i<=NF;i++)print $i}' file

или

 tr ' ' "\n" < file

если хочешь уникальность:

awk '{for(i=1;i<=NF;i++)_[$i]++}END{for(i in _) print i}' file

tr ' ' "\n" < file | sort -u

с некоторыми пунктуациями.

awk '{
    gsub(/["*^&()#@$,?~]/,"")
    for(i=1;i<=NF;i++){  _[$i]  }
}
END{    for(o in _){ print o }  }' file
3 голосов
/ 14 июля 2009

Хорошее начало - просто использовать sed, чтобы заменить все пробелы символами новой строки, убрать пустые строки (снова с sed), затем sort с флагом -u (uniquify) для удаления дубликатов как в этом примере:

$ echo "the quick brown dog and fox jumped
over the lazy   dog" | sed 's/ /\n/g' | sed '/^$/d' | sort -u

and
brown
dog
fox
jumped
lazy
over
quick
the

Тогда вы можете начать беспокоиться о пунктуации и тому подобное.

0 голосов
/ 26 августа 2015

Команда tr может сделать это ...

tr [:blank:] '\n' < test.txt

Это просит программу tr заменить пробел новой строкой. Выводом является стандартный вывод, но он может быть перенаправлен в другой файл, result.txt:

tr [:blank:] '\n' < test.txt > result.txt

См. здесь .

0 голосов
/ 14 июля 2009

Unix (TM) Кена Черча для поэтов (PDF) описывает именно этот тип приложения - извлечение слов из текстовых файлов, сортировку и подсчет их и т. Д.

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