【发布时间】:2016-04-29 07:48:14
【问题描述】:
我尝试使用shuf 来打乱文件,但耗时太长;该进程被托管管理员杀死。我有最便宜的 Linux Bluehost 计划。
shuf MMM.csv
文件有 44M 行,文件大小为 7439641823 字节,使用sort -R 更糟糕,考虑将文件分成 44 个文件,但不会很随机,任何想法将不胜感激
我想要的是打乱文件,然后提取前 10000 行
文件已排序,由于业务原因,10000行无法排序
【问题讨论】:
-
嗯。我可以为此想到一些不同的算法——一种是生成一个 4400 万长的随机数或 UUID 列表,并将该列表用作排序键;可以使用该键对单个拆分文件进行排序(索引到完整列表中以获取适当的偏移量),然后执行合并排序传递。然而,在进入细节之前——实际的用例是什么?它实际上需要有多随机?
-
您这样做是为了达到什么目的?这在我看来像是一个 XY 问题。
-
正如 Sobrique 所说,这可以通过了解您的最终目的进行最佳优化。 shuffle 本身永远不会结束,通常用于从样本中选择随机子集。你用你的 shuffle 做什么?
-
您的编辑完全改变了问题。您需要做的就是从文件中随机选择 10,000 行;你不需要洗牌整个 4400 万行。这就是@Sobrique 关于“XY 问题”的意思。
-
然后发布一个问题说,不是你必须洗牌一个44M的行文件!另外发布一个示例,其中包含一个 10 行长的文件,并询问如何从该文件打印 4 行并显示预期的输出。
标签: linux bash perl sorting awk