我想从文本文件中找到所有词汇表(它是从真正的电子书转换而来的,所以可能更大,解决方案需要有效),并且我已经在名为voclist的文本文件中输出了词汇表。我想删除一些非法词语,例如(aa,aazzz)。
我尝试了“ egrep [a-z] + voclist”。 当然,这行不通。
This is the block contain illegal words:
2 accepting
2 absence
1 zz
1 yyybb
1 yarn
I want output like this:
2 accepting
2 absence
1 yarn
我经常考虑这个问题。删除“ yyybb”并同时保持“接受”可能有点困难,而在真正的电子书中很少出现“ yyybb”,所以我们可以删除“ zz”。有人有什么主意吗?
答案 0 :(得分:1)
假设inputfile
包含:
2 accepting
2 absence
1 zz
1 yyybb
1 yarn
要获取包含两个或多个重复字符的单词列表:
$ egrep "(\w)\w*\1" inputfile
2 accepting
2 absence
1 zz
1 yyybb
并过滤非法单词,您可以使用字典,例如
$ cat dictionary
accepting
absence
并与之比较:
$ egrep "(\w)\w*\1" inputfile | grep -f dictionary
2 accepting
2 absence
答案 1 :(得分:0)
您使用的格式有点麻烦。看起来它来自sort
和uniq -c
的组合。为简化起见,我将假定以下输入格式:
accepting
absence
zz
yyybb
yarn
很长一段时间,您可以编写:
$ grep -v -e '^.$' \ # single char
-e '^\(.\)\1$' \ # single repeated char (e.g. zzzz)
-e '\(.\)\1\+' \ # repeated char (3 or more times)
-e '^[aeiou]\+$' \ # only vowels
-e '^[bcdfghjklmnpqrstvwxyz]\+$' \ # only consonants
file
我们使用grep
,因为它支持匹配部分中的反向引用。 awk不允许的内容。
现在可以按以下原始格式使用它:
awk '{print $2}' file \
| grep -v -e '^.$' -e '^\(.\)\1$' -e '\(.\)\1\+' \
-e '^[aeiou]\+$' -e '^[bcdfghjklmnpqrstvwxyz]\+$' \
| grep -wFf - file