Bash 估计大型文本文件的大小

Bash 估计大型文本文件的大小,bash,shell,random,text-processing,large-files,Bash,Shell,Random,Text Processing,Large Files,关于从文本文件中选择n个随机行的问题,请参见以下注释: 用户评论说,他们使用shuf命令在不到一分钟的时间内从一个780亿行的文本文件中随机选择行 我从互联网上的各种来源看到,根据元数据的不同,人们的文本文件大小从100GB-200GB-300GB不等,只有70-150亿行 假设我们有: 包含ASCII字符的文本文件,其中我们在每100个字符后定义换行符。这个文件有780亿行 我们的系统具有如下计算能力: a。RAM-16GB b。处理器-2.5 GHz Intel Core i7 c。磁盘-5

关于从文本文件中选择n个随机行的问题,请参见以下注释:

用户评论说,他们使用shuf命令在不到一分钟的时间内从一个780亿行的文本文件中随机选择行

我从互联网上的各种来源看到,根据元数据的不同,人们的文本文件大小从100GB-200GB-300GB不等,只有70-150亿行

假设我们有:

包含ASCII字符的文本文件,其中我们在每100个字符后定义换行符。这个文件有780亿行

我们的系统具有如下计算能力:

a。RAM-16GB

b。处理器-2.5 GHz Intel Core i7

c。磁盘-500GB SSD

我很好奇:

文本文件的估计大小是多少? 这也将取决于不同的操作系统如何在内存级别编码和存储字符吗?如果是,那么在尺寸计算中会考虑多少因素

理想情况下,在具有上述规范的系统上运行bash需要多少时间才能使用shuf命令处理此文本文件

如果文本文件大小为TBs,那么如何向系统提供数据? shuf将如何在上述系统中以最高效率处理如此大的文件

上述系统规格中的shuf性能:

每行100个字符:1行


文件大小:~100字节


 时间:实际0.025s
用户0m0.007s
 sys 0m0.013s

每行100个字符:100000行


文件大小:~10MB

时间:
实际0.122s
用户0m0.036s
sys 0m0.080s

每行100个字符:100000000行


文件大小:~10GB


时间:实时9m37.108s用户2m22.011s系统3m3.659s

[nit:对于那些感兴趣的人,这里有一些reddit meme的线程: ]

编辑1: 细化问题以获得更多细节。根据评论和发现添加更多资源

编辑2:
在我的系统中为不同的文本文件大小添加了shuf性能

并非您引用的帖子中的所有评论者都同意该性能。一位用户评论说78B是一分钟的超快处理,而另一位用户则评论说在13分钟内从500万行到1000行的结果要慢得多

您可以尝试以下操作:将NNN替换为您喜欢的尺寸: 序号1 NNN>1;时间shuf 1>/dev/null

我得到: *对于N=1000000,时间=0.2秒 *对于N=10000000,时间=3.5秒

在13分钟内,这两条路线都与500米的路线保持一致

请注意,对于10M线路,操作是CPU限制的。如果文件大小超过内存,则速度会变慢


底线是,最有可能的测量错误

它与bash无关,例如,当您对-R文件进行排序时,处理文件的是sort,bash甚至看不到文件内容1。混合概念。原始数据意味着一个无格式的二进制文件,它没有行的概念。文本文件是带有行的格式化文件,无论长度是否由“\n”字符分隔。您可以通过随机测试的行数乘以平均长度的乘积来了解文件大小。2.对于超大文件,shell工具可以使用滑动窗口方法在缓冲区中保留X行数,允许您向前/向后滚动,使整个文件看起来都在内存中。嘿,David,谢谢您的来电。除去“原始数据”,我的问题完全集中在文本文件中的行上,并围绕这些行进行计算。原始数据可能会误导blob的概念。此外,问题仍然是如何处理这些大数据以及估计的数据大小。@oguz,根据您的反馈,已经为问题添加了更多细节。让我知道是否需要更多的粒度来帮助理解上下文。我没有要求提供代码猴子讨论的无用链接。比如,你提到的所有工具都是开源的,你有没有检查过这些工具,看看是什么让它们这么快?您是否对设置进行过任何测试?您是否编写了任何代码来与这些工具进行性能方面的比较?您可以通过生成N个随机数(总行数为%)来避免混乱,您可能需要操纵结果或使用其他随机源,因为$random被限制为16位值。然后使用sed或awk计算所选线条的平均长度。拉出随机线还需要一段时间。值得一试,看看它是否能节省时间