Извлекать слова из файла

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

Ответ 1

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

  • -E '\w+' выполняет поиск слов
  • -o печатает только часть строки, которая соответствует
% cat temp
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.
# if you don't care whether words repeat
% grep -o -E '\w+' temp
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

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

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

Ответ 2

Хорошим началом является простое использование 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

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

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

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

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

Обратитесь здесь.