特定长度的独特单词

时间:2013-12-26 08:08:55

标签: shell unix

我使用此命令列出长度为2的单词

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

但它会多次出现重复的单词。

如何让它打印长度为2的单词列表而不重复?

输入样本

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

1 个答案:

答案 0 :(得分: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

这样只有Anor匹配。

最后,如果您的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

<强>更新

我发现\<对阿拉伯语不起作用,至少在我的系统中不行(Debian / Linux)。但是,我提出的第一个解决方案似乎有用,为此输入:

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

我明白了:

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

所有看起来都是2个字母并且是唯一的。