Извлекать слова из файлов - PullRequest
2 голосов
/ 29 ноября 2011

Как я могу извлечь все слова из файла, каждое слово в одной строке? Пример:

test.txt

This is my sample text

Выход:

This
is
my
sample
text

Ответы [ 5 ]

5 голосов
/ 29 ноября 2011

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

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

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

tr [:blank:] '\n' < test.txt > result.txt
1 голос
/ 30 ноября 2011

А вот и очевидная линия bash:

for i in $(< test.txt)
do
    printf '%s\n' "$i"
done

РЕДАКТИРОВАТЬ Еще короче:

printf '%s\n' $(< test.txt)

Это все, что нужно, без особых (жалких) случаев (и обработка нескольких последующих разделителей слов / ведущих / конечных разделителей осуществляется с помощью «Правильного действия»). Вы можете настроить понятие разделителя слов, используя переменную $ IFS, см. Руководство по bash.

0 голосов
/ 30 ноября 2011

Perl ответ будет:

pearl.214> cat file1
a b c d e f pearl.215> perl -p -e 's/ /\n/g' file1
a
b
c
d
e
f
pearl.216> 
0 голосов
/ 30 ноября 2011

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

# echo -e "this     is\tmy\nsample text" | sed 's/\s\+/\n/g'           
this
is
my
sample
text
0 голосов
/ 30 ноября 2011

Ответ выше не обрабатывает несколько пробелов, и это очень хорошо. Альтернативой будет

perl -p -e '$_ = join("\n",split);' test.txt

что бы. Э.Г.

esben@mosegris:~/ange/linova/build master $ echo "test    test" | tr [:blank:] '\n' 
test



test

Но

esben@mosegris:~/ange/linova/build master $ echo "test    test" | perl -p -e '$_ = join("\n",split);' 
test
test
...