我至少有500个不同的文件包含单词(每个单词在单独的一行中)。问题是这些列表很长(总共有50亿条记录),我很难使每个列表都是唯一的。我想保留文件名,但同时在每个文件中都有唯一的条目(不合并等)。
到目前为止,我尝试了不同的程序,如app.merge和ccr,DB,表中有唯一的列(postgresql和sqlite),但没有成功。找不到可靠的解决方案。你对此有什么建议?
编辑:我正在努力防止任何文件包含常用词。为了更好地解释它,假设我有3个文件,内容如下:
f1:
word1
other
something
f2:
word2
word1
other
f3:
word1
something
myentry
因此,我希望看到:
f1:
word1
other
something
f2:
word2
f3:
myentry
当然,文件本身要大得多(以这个为例:http://md5decrypt.net/Telecharger-wordlist/Md5decrypt-awesome-wordlist.7z)。为了回答"到目前为止我测试了什么"的问题,以下是我现在正在编写的代码:https://pastebin.com/Y8HutakU结果如下(运行1小时后停止):https://pastebin.com/tknve7qA.我知道代码远不是最佳的,而且在输出中可以清楚地看到,随着数据库的增长,下一次插入数据库的时间越来越长。我正在试用DB,因为我认为它将是一个很好的解决方案,可以让所有单词都是唯一的,保留文件名,并有一个比较方法供将来使用(当我下载另一个单词列表进行比较时)。此外,还有一些关于SQLite性能的好文章:
- http://www.sami-lehtinen.net/blog/sqlite3-performance-testing
- https://sites.google.com/site/samilehtinenps/blog/sqlite3-python32-100-million-rows-1-million-row-read-write-test
如果您在Linux系统上,您可以使用标准的命令行工具。
for file in /path/to/files/*
do
echo "`sort -u $file`" > $file
done