我试图使用shuf来洗牌文件,但时间太长;进程被宿主管理员终止。我有最便宜的Linux Bluehost计划。

shuf MMM.csv

文件有44m行,文件大小为7439641823字节,使用sort -R甚至更糟,考虑将文件拆分为44个文件,但这不是很随机的,任何想法都将非常感谢
我要的是洗牌文件,然后提取前10000行
文件已排序,由于业务原因,10000行无法排序

最佳答案

关键是使用“shuf”和-n(“最多输出计数行”)选项。
比较:

$ time (seq 1 44000000 | shuf > /tmp/shuffled)
user  0m58.234s
sys   0m4.394s

$ time (seq 1 44000000 | shuf -n 10000 > /tmp/shuffled)
user   0m25.493s
sys    0m1.771s

(这些计时是在一台旧的2.53GHz Mac电脑上进行的。)
注意:在某些环境中,“shuf”可能可用作“gshuf”。

10-06 13:44