从关于在此处从文本文件中选择n个随机行的问题的评论开始:
Select random lines from a file
用户评论说,他们使用shuf命令在不到一分钟的时间内从具有780亿行的文本文件中随机选择行。
[我从互联网上的各种来源中看到,根据元数据的不同,人们的文本文件大小从100GB-200GB-300GB不等,仅为7-15亿行。
假设我们有:
包含ASCII字符的文本文件,我们在每100个字符之后为换行符定义一个换行符。该文件有780亿行。
我们的系统计算能力为:
a。内存-16GB
b。处理器-2.5 GHz Intel Core i7
c。磁盘-500GB SSD
我对:
感到好奇这还将取决于不同的操作系统如何在内存级别编码和存储字符吗?如果是,那么它将多少计入尺寸计算?
理想情况下,多少时间[bash-在系统上运行(具有上述规格)-使用shuf命令处理此文本文件将花费多少时间?
shuf
shuf
我的系统中的性能(上述规格):文件大小:〜100Bytes
时间:实数0m0.025s用户0m0.007s sys 0m0.013s
文件大小:〜10MB
TIME:real 0m0.122s用户0m0.036s sys 0m0.080s
文件大小:〜10GB
[时间:真实9分37.108秒。用户2m22.011s sys 3m3.659s
[nit:对于那些感兴趣的人,这里有一些相同的reddit meme线程:https://www.reddit.com/r/ProgrammerHumor/comments/grsreg/shuf_go_brrr/https://www.reddit.com/r/ProgrammerHumor/comments/groe6y/78_billion_prayers/]
编辑#1:提炼问题以获得更多细节。根据评论和发现添加更多资源。
编辑#2:在我的系统中为不同的文本文件大小增加了shuf性能]
您可以尝试以下操作:(用您喜欢的尺寸替换NNN):seq 1 NNN> 1;时间shuf 1> / dev / null
我正在:*对于N = 1,000,000时间= 0.2秒*对于N = 10,000,000时间= 3.5秒
都在13分钟内符合5亿行。
请注意,该操作受CPU限制为1000万行。如果文件大小超出内存,则会变慢。
底线,最有可能的测量误差