Я пытаюсь создать словарь слов из набора файлов. Есть ли простой способ распечатать все слова в файле, по одному в строке?
Извлекать слова из файла
Ответ 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
Обратитесь здесь.