在 Linux 中对巨大的列表 (130Gb) 进行排序

Joh*_*Tam 2 sort

我正在尝试sort在 Linux 中创建一个巨大的列表(130 Gb)。部分是这样的:

@K00188:14:H2LMFBBXX:6:1101:27440:1668 1:N:0:0_I_CGATGT
@K00188:14:H2LMFBBXX:6:1101:30262:1668 1:N:0:0_I_CGATGT
@K00188:14:H2LMFBBXX:6:1101:6501:1686 1:N:0:0_I_CGATGT
@K00188:14:H2LMFBBXX:6:1101:18133:1686 1:N:0:0_I_CGATGT
@K00188:14:H2LMFBBXX:6:1101:21827:1686 1:N:0:0_I_CGATGT
Run Code Online (Sandbox Code Playgroud)

问题是在sort.

以前的问题有一些解决方案(例如sort --parallel,python 脚本等),但它们在我手上没有解决。

我想坚持,sort但在使用该选项时出现以下错误消息--parallel

sort: unrecognized option '--parallel=2'
Try `sort --help' for more information.
Run Code Online (Sandbox Code Playgroud)

如果有一些用于排序大列表的python脚本,我想尝试一下。

你有什么建议吗?

Sté*_*las 7

sort(除了一些精简的实现,如busybox)不受内存限制,因为它只使用有限的数量,并在达到该限制时求助于临时文件。

更有可能的是,您的磁盘空间不足。在sort正在使用的临时区域中,您将需要大约 130GB 的可用磁盘空间(除了用于存储结果的磁盘空间,除非您使用 将文件写入自身sort -o mybigfile mybigfile)。

如果 的文件系统中没有足够的空间/tmp,请设置$TMPDIR为具有更多可用磁盘空间的位置(另请参阅-T某些sort实现的选项):

TMPDIR=~/tmp sort my-big-file > sorted
Run Code Online (Sandbox Code Playgroud)

为了减少所需的临时磁盘空间量,在某些sort实现中,您还可以告诉它压缩临时文件。如果您选择像 CPU 一样易于使用lzop且在旋转磁盘上具有文件系统的压缩器,这甚至可能会提高性能。

TMPDIR=~/tmp sort --compress-program=lzop my-big-file > sorted
Run Code Online (Sandbox Code Playgroud)