我正在尝试编写一个随机密码生成器。我有一本包含一堆单词的字典,我想删除其根已经在字典中的单词,这样一个字典看起来像:
ablaze
able
abler
ablest
abloom
ably
最终只会
ablaze
able
abloom
ably
因为能力和能力包含以前使用过的能力。
我希望使用grep进行此操作,以便我可以了解更多有关其工作原理的信息。我能够用c或python编写程序来执行此操作。
如果对列表进行了排序,以便较短的字符串始终在较长的字符串之前,则可以通过简单的Awk脚本获得相当好的性能。
awk '$1~r && p in k { next } { k[$1]++; print; r= "^" $1; p=$1 }' words
如果当前单词与前缀正则表达式r
(稍后定义)匹配并且前缀p
(同上)在可见键列表中,请跳过。否则,将当前单词添加到前缀键中,打印当前行,创建一个与行首匹配当前单词的正则表达式(现在是前缀regex r
),并且还要记住前缀字符串p
。
如果所有的类似的字符串始终是相邻的(因为它们是,如果你排序文件词汇),你可以废除k
和p
全太,我猜。
awk 'NR>1 && $1~r { next } { print; r="^" $1 }' words
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句