我正在使用sort -k1,1 -k2,2 srcfile> tgtfile
...但这会引发错误“设备中没有空间”,因为 src 文件中包含 1.8 亿行。
如何解决这个问题?
答案1
GNUsort
可以对大于 RAM 容量的文件进行排序。
它通过对输入中适合的部分进行排序、将结果写入临时文件、继续处理下一个输入部分、对其进行排序、将其写入临时文件等来实现这一点。然后,它将所有部分排序的文件合并为一个排序的输出。
写入这些临时文件的文件系统需要足够大才能保留输入文件的全部内容(可能会多次保存)。 GNU 排序是不是非常聪明地选择临时文件写入的目录 - 它只使用系统默认值(通常是/tmp
)。
为了缓解您的问题,请告诉 sort 将临时文件放在目标文件旁边(无论如何,它们都会被自动清理),使用
sort --temporary-directory=. -k1,1 -k2,2 -o tgtfile srcfile