如何在Linux系统通过命令行生成随机文件

如何在Linux系统通过命令行生成随机文件,第1张

A、当你不需要关心随机文件内容,只需一个固定大小的文件

1、Solaris、Mac OS X等Unix系统中mkfile指令,可以产生指定大小的文件,而Linux上则没有

例子:

mkfile -n 160g test1

2、Linux可以用dd指令,/dev/zero是一个特别的文件描述符可以通过它返回null值

例子:

dd if=/dev/zero of=test.file count=1024 bs=1024

产生count * bs字节的文件,1M

此方法生成随机文件的好处在于效率高(产生1G文件大概1s),创建的文件大小精确到字节

坏处也有

使用null字符来填充文件内容,文件统计时没有行(wc -l test.file为段悔0)

B、当你不需要关心随机文件的内容,但期望测试文件能有统计的行

将/dev/zero改为/dev/urandom,/dev/urandom是linux下的随机数生成器

关于/dev/urandom跟/dev/random两者的区别就不在此详细讨论,大概就是,前者是不受系统interrupts的限制,即使没有足够的interrupt它也能通过随机数生成器产生足够的输出值;而后者如果用在dd上,它不能被ctrl+c或者kill -9中断,如果ds的值较大时,产生的随机值不足而长期占用CPU。虽然说/dev/random产生的随机数会更随机些,但与dd混用还是建议用/dev/urandom效率更高。

缺点跟/dev/zero比当然是效率会更低些了,生成个100Mb的文件需要10秒左右,而且文件并没有可读的内容,一般的情况基本上是满足了。

漏了说句,dd是linux与unix都支持的指令。

C、当你关心文件的随机内容行数,而不关心内容是否有所重复

这里的思路就是找一个参照文件(比如说2行),将文件重新定向到新的文件,再mv覆盖保存,外加一个for循环。(n为循环次数,产生的文件行为2^(n+1))

例子:假设先建立一个file.txt文件,里面含有Hello 和 World两行

for i in {1..n}do cat file.txt file.txt >file2.txt &&mv file2.txt file.txtdone

由于是阶乘,n=20左右已经是200W行,效率会下降地比较厉害

D、当你关心随机文件的内容,而不想出现重复内容行情况

这种情况下系统的指令应该是不能满足了,或者可以通过 *** 作系统的指令写一大串脚本也可以握慧正达到,但不建议这么做,因为可读性和维护性考虑,你应该要引入Ruby或者Python类的脚本语言帮忙了

但还是要借助些系统的东西来帮忙

思路:

/usr/share/dict/words里面有记录一些单词,一共235886行,每行一个单词碧昌

可以从里面挑选一些作为文件的内容

加循环达到我们想要的随机文件要求

举例:

ruby -e 'a=STDIN.readlinesX.times dob=[]Y.times dob<<a[rand(a.size)].chomp endputs b.join(" ")' </usr/share/dict/words >file.txt

X为随机文件需要的行数,Y为从words中读取的单词,虽说组合成一句的命令,还是可以读懂的;从标准输入中重复读取Y个单词,写入到b列表中,然后再通过join空格连接内容写入到标准输出文件file.txt中

这样基本很少会有重复的行了,而且生成的效率与其他方法对比还是可以的,10秒生成100Mb文件。欢迎大家讨论。

随机文件是VB的一种类似于数据库的一种文件格式,它和顺序文件的最大区别是随机渗败告文件丛明是以数据枯庆块为存储单位的(顺序文件则是以行或字符为单位的),就像把一大块蛋糕分成相等的N块,然后可以任意取出其中的某块,这也就是“随机文件”这个名称的由来。而顺序文件则做不到这样,要想取出其中的某行,由于每行的字数不一定相等,所以是不能直接取出来的,必须先按顺序取出该行前面的每一行,一直到需要的那行,所以叫“顺序文件”。

正是因为随机文件可以随机取出其中任意一个数据块的特点,所以一些VB程序用随机文件来作为小型数据库使用。

但是(请注意这个“但是”),所谓的“随机文件”并不是指某种(或某几种)具体的文件类型!它完全取决于编程者是用什么方式打开文件的。比如,同样一个文本文件,如果用随机方式打开,它就是随机文件,用顺序方式打开,它就是顺序文件,用二进制方式打开,它就是二进制文件。而且不单是文本文件,任何类型的文件(包括EXE可执行文件)都可以用VB用随机、顺序或二进制的方式打开的,区别只在于打开后的使用效果有可能千差万别而已。

所以别费心机去找具体的所谓“随机文件”了,因为它不是文件类型,而是文件打开方式!就像你拿着一只活鸡说:“我怎么没看见宫保鸡丁?”

首先在通用模晌猜块里定义数据类型, 用Type。。。End Type

如:

Type XSDA '学生档案

XM as string * 5 '姓名为字符串,最大长度为5

XH as long '学谨猜号为长整形数字

End Type

Public DA as XSDA '定义变量名称

下面,假如Form1 有 Text1, Text2, 和Command1,在Text1里输入姓名,Text2里输入学号。按Command1把它们写入本地文件夹的“学生档案”随机文件。宴晌型代码如下:

Private Sub Command_Click()

Open App.path &"\学生档案" for random as #1 len=len(DA)

DA.XM=Text1.Text

DA.XH=Text2.Text

Put #1, 1, DA '1为第一个记录

Close #1

End Sub


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12116683.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存