2013-05-10 3 views
4

У меня есть текстовый файл ASCII. Я хочу сгенерировать список всех «слов» из этого файла, используя одну или несколько команд Ubuntu. Слово определяется как последовательность альфа-num между разделителями. Разделители по умолчанию имеют пробелы, но я также хочу поэкспериментировать с другими символами, такими как пунктуация и т. Д. Другими словами, я хочу иметь возможность указать набор символов разделителя. Как я могу создать только уникальный набор слов? Что делать, если я также хочу перечислить только те слова, длина которых не менее N символов?Как сгенерировать список (уникальных) слов из текстового файла в ubuntu?

+0

В принципе вам нужен bash или, скорее, сценарий оболочки. –

ответ

9

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

-E «\ W +» поисков слов -o печатает только часть строки, которая соответствует % TEMP кошек Некоторые примеры использования «Быстрая коричневая лиса перепрыгнула через ленивая собака ", , а не" Lorem ipsum dolor sit amet, consectetur adipiscing elit " например текст.

, если вы не заботитесь слова повторяют ли

% 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 

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

-u только печатает каждое слово один раз - е говорит вроде игнорировать регистр при сравнении слов

, если вы хотите только каждое слово, когда

% 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 

вы можете также использовать команду tr

echo the quick brown fox jumped over the lazydog | tr -cs 'a-zA-Z0-9' '\n' 
the 
quick 
brown 
fox 
jumped 
over 
the 
lazydog 

-c для дополнения указанных символов; -s сжимает дубликаты замен; «a-zA-Z0-9» - это набор буквенно-цифровых символов, если вы добавите здесь символ, вход не будет разделен на этот символ (см. другой пример ниже); «\ n» - это символ замены (новая строка).

echo the quick brown fox jumped over the lazy-dog | tr -cs 'a-zA-Z0-9-' '\n' 
the 
quick 
brown 
fox 
jumped 
over 
the 
lazy-dog 

Поскольку мы добавили '-' в список без разделителей, была напечатана ленивая собака. Другой выход

echo the quick brown fox jumped over the lazy-dog | tr -cs 'a-zA-Z0-9' '\n' 
the 
quick 
brown 
fox 
jumped 
over 
the 
lazy 
dog 

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

0

Это должен работать для вас:

tr \ \\t\\v\\f\\r \\n | | tr -s \\n | tr -dc a-zA-Z0-9\\n | LC_ALL=C sort | uniq 

Если вы хотите, чтобы символы, которые по крайней мере, пяти символов, конвейер вывод tr через grep ...... Если вы хотите нечувствительность к регистру, поместите tr A-Z a-z где-нибудь в трубопровод до sort.

Обратите внимание, что LC_ALL=C необходим для правильной работы sort.

Я бы рекомендовал прочитать страницы man для команд муравьев, которые вы здесь не понимаете.

Смежные вопросы