我在磁盘上有一个2TB文件,并希望通过第二列对其进行数字排序。 (事实上,我只需要前20条记录)。
我尝试了什么:
sort -k2nr 2tbfile.log | head -20
运行几分钟后,我收到一个错误 - 没有足够的磁盘空间。
对这种大规模数据进行排序的最佳方法是什么?
答案 0 :(得分:2)
由于您只需要前20条记录,因此对整个文件进行排序会占用大量内存(RAM或交换或临时空间)。有一种算法可以提取前20个(或许多你想要的)记录,但我不认为有一个标准的命令行工具可以实现它。
该算法(称为“部分排序”)使用优先级队列,您可以使用任意数量的语言实现,包括bash,但在bash中会很痛苦。事实上,该算法已经在Python标准库中实现,这使得脚本很短:
@media (min-width: 768px)
以下是您如何使用它:
#!/usr/bin/python
import heapq
import sys
records = ((int(line.split()[1]), line) for line in sys.stdin)
top = heapq.nlargest(20, records)
for pair in top:
print pair[1],