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

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

我正在尝试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

问题是 期间 RAM 不足sort

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

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

sort: unrecognized option '--parallel=2'
Try `sort --help' for more information.

如果有一些为大列表排序而编写的Python脚本,我想尝试一下。

你有什么建议吗?

答案1

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

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

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

TMPDIR=~/tmp sort my-big-file > sorted

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

TMPDIR=~/tmp sort --compress-program=lzop my-big-file > sorted

答案2

我正在尝试对一个巨大的列表(130 GB)进行排序。

您想要逐行对一个巨大的文本文件进行排序。

排序:无法识别的选项“--parallel=2”

这是有记录的作为最近的 GNU coreutils 接受的选项。所以你很不幸没有 GNU corutils,sort 而是有其他的。所以我建议编译并安装最近的 GNU 核心工具,例如来自其的 coreutils-8.27来源(2017 年夏季)。您可以使用--program-suffix=-myconfigure脚本进行sort-my安装(以避免弄乱提供的系统sort)。

(即使没有root权限,您也可以configure使用例如--prefix=$HOME/pubthen make install;然后您可能想要添加$HOME/pub/bin/ 到您的小路....)

如果不可能,您可以使用分裂,然后对每个较小的块进行排序,然后合并它们(使用sort --merge)。

另一种可能性是编写一些小的 Python 脚本来解析这个大文件并将其放入某个文件中。sqlite数据库。

我强烈建议获取并使用最新的 GNU核心工具(任何其他方法都会花费您更多的时间)。这是最实用的方法。您的文件系统上可能需要足够的额外可用空间(可能是 150Gb)来运行排序。

如果您从未从源代码编译过任何 GNU 实用程序,我建议您执行以下步骤:

  • 例如,使用 或您的浏览器获取 coreutils 源 tar 球wget http://ftp.gnu.org/gnu/coreutils/coreutils-8.27.tar.xz

  • tar xvf coreutils-8.27.tar.xz 使用(使用最新的 GNU tar)提取它;否则使用解压xz -d coreutils-8.27.tar.xz 然后使用解压tar xvf coreutils-8.27.tar

  • 创建一个用于安装 GNU 实用程序的目录mkdir $HOME/gnu/

  • 进入 coreutils 源目录cd coreutils-8.27

  • 编译前配置:

     ./configure --prefix=$HOME/gnu/ --program-suffix=-my
    

如果您收到一些错误消息,请尝试纠正您的系统(例如,由于缺少 C 编译器等实用程序)和/或寻求帮助。阅读自动配置配置脚本了解选项。

  • 建造它

    make
    
  • 安装它(如果构建顺利)

    make install
    

(您不需要任何 root 权限即可运行上述所有内容)

  • 然后用来$HOME/gnu/bin/sort-my进行排序(您可能会考虑添加$HOME/gnu/bin/到您的小路能够简单地输入sort-my

相关内容