Вы могли бы просто труба, 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-буквы и уникальным.
+1 для альтернативы (см., Наконец, ...). – devnull
при использовании | sort -u это перечислить часть слова, а не неполное слово! Зачем? – user2999200
@ user2999200 Я не понимаю, что вы имеете в виду. Возможно, вы можете объяснить более подробно. Вы пробовали все мои решения? – janos