如何对多 GB 文件中的多行组进行随机排序?

如何对多 GB 文件中的多行组进行随机排序?

我有一个多 GB 的文件,其中包含 4 行元素,我想将另一个文件中的每 4 行随机化,也就是说,将每 4 行分组并随机化这些集合。有没有简单的方法可以做到这一点?

答案1

如果你正在使用一个较新的 Linux/Unix 发行版,sort带有一个-R标志,可以随机化行而不是对它们进行排序。我们可以使用它来创建这个一行解决方案:

awk '{printf("%s%s",$0,(NR%4==0)?"\n":"\0")}' file.txt | sort -R | tr "\0" "\n" > sorted.txt

首先,使用awk将每 4 行分组,方法是将其替换\n\0。然后我们使用 打乱行次sort -R,最后使用 恢复换行符tr

答案2

这是用 Python 写的。我确信有人也会发布一个 Perl 答案。;-)

/usr/bin/python 的 #!

随机导入

#将这些更改为所需的文件
infile =“/路径/到/输入/文件”
outfile =“/路径/到/输出/文件”

fh = 文件(输入文件)
内容 = fh.readlines()
fh.关闭()

chunked = [contents[i:i+4] 对于 i 在 xrange(0, len(contents), 4) 中
随机洗牌(分块)

fh = 文件(输出文件,'w')

对于分块中的块:
    对于块中的行:
        fh.写入(行)

fh.关闭()

IANA 程序员,所以有人可能会改进这一点,但我测试了一下,它运行良好。

相关内容