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

719*_*016 5 sorting

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

Sha*_*hin 4

如果您使用的是合理的新 linux/unix 发行版,sort则带有一个-R标志,该标志可以随机化行而不是对它们进行排序。我们可以用它来创建这个单行解决方案:

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

首先,通过替换为 来awk对每 4 行进行分组。然后我们使用 打乱行,最后使用 恢复换行符。\n\0sort -Rtr