擅长:python、mysql、java
<p>对于大文件排序可能需要很长时间,我会尝试使用<code>dict</code>和<code>set</code>的纯Python解决方案:</p>
<pre><code>import collections
import fileinput
results = collections.defaultdict(set)
for line in fileinput.input():
try:
domain, ip = line.strip().split('|')
except ValueError:
continue
results[ip].add(domain)
print results # or write to file or anything
</code></pre>
<p>这有O(n)的复杂性,只有IO会成为这里的瓶颈。
别担心内存,除非你真的撞到了墙-这就是交换分区的用途,对吧?在</p>
<p>如果结果集非常大(大多数是唯一的对),并且交换需要非常长的时间,那么可以在较小的批处理上运行此脚本,将部分结果(更适合内存)写入文件存储桶(每个IP范围到单独的文件)。然后您可以使用另一个脚本分别解析这些bucket。在</p>