2013-12-26 5 views
1

Я использовал эту команду для получения списка слов длины 2Уникального слова определенной длиной

tr ' ' '\n' < cca.txt | grep '^.\{2\}$' 

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

Как я могу распечатать список слов длиной 2 без дублирования?

образец ввода

" إن اللقاء هو فقط عرض لفيلم مسجل عن محاضرة له سابقة وأنهم يتوقعون جمهورا كبيرا لها 
ثم التقيت بمبشر قضى أكثر ردح من حياته في بلاد الشام يدأب لإنشا" 

ответ

2

Вы могли бы просто труба, sort -u:

tr ' ' '\n' < cca.txt | grep '^.\{2\}$' | sort -u 

Или его простая форма:

tr ' ' '\n' < cca.txt | grep '^..$' | sort -u 

Однако рассмотрим этот пример текста:

## Todo list with priorities 

- An option: priority, time, or mix 
- a: Topics 
- b: categories 

С вашим оригинальным решением такие вещи, как ## и a:, совпадают, что на самом деле не слова. Вы могли бы быть более строгим, как это:

tr ' ' '\n' < cca.txt | grep '\<..\>' | sort -u 

Таким образом, только An и or будет соответствовать.

Наконец, если ваша версия grep имеет -o флаг, то вы можете сделать это без tr:

grep -o '\<..\>' cca.txt | sort -u 

Вы также могли бы сделать все, что в едином awk предпосе:

awk '{ for (i=1; i<=NF; ++i) if ($i ~ /\<..\>/) u[$i]=1 } END { for (i in u) print i }' cca.txt 

ОБНОВЛЕНИЕ

Я вижу, что t он \< не работает хорошо с арабским, по крайней мере, не в моей системе (Debian/Linux). Тем не менее, первое решение, которое я предложил, кажется, работает, для этого входа:

إن اللقاء هو فقط عرض لفيلم مسجل عن محاضرة له 
سابقة وأنهم يتوقعون جمهورا كبيرا لها 
ثم التقيت بمبشر قضى أكثر ردح من حياته 
في بلاد الشام يدأب لإنشا 
إن اللقاء هو فقط عرض لفيلم مسجل عن محاضرة له 
سابقة وأنهم يتوقعون جمهورا كبيرا لها 
ثم التقيت بمبشر قضى أكثر ردح من حياته 
في بلاد الشام يدأب لإنشا 

я получаю:

إن 
ثم 
عن 
في 
له 
من 
هو 

Что все выглядят 2-буквы и уникальным.

+0

+1 для альтернативы (см., Наконец, ...). – devnull

+0

при использовании | sort -u это перечислить часть слова, а не неполное слово! Зачем? – user2999200

+0

@ user2999200 Я не понимаю, что вы имеете в виду. Возможно, вы можете объяснить более подробно. Вы пробовали все мои решения? – janos

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