生成填充了一组文件中内容的文件,这些文件具有给定范围内的任何大小

时间:2013-10-17 13:54:05

标签: linux bash shell unix random

有没有办法生成一个范围内的任何大小的文件(以字节为单位提供输入:例如:range1 = 10000000 range2 = 5000000000),填充了文件列表中的随机行(作为输入提供的文件夹) Linux呢?

我尝试了以下方法来生成一个大文件(1 GB)(从超级用户论坛获取)

openssl rand -out sample.txt -base64 $(( 2**30 * 3/4 )) 
split -b 10000 -a 10 sample.txt

这给了我许多来自sample.txt

的10K字节的文件

但是我需要调整它(或者在性能方面比这更好)所以它接受我的输入和基于它的构建。

示例:

Folder1 / file1包含

sddfas|sdfsda f|dfsdg b| sdf| afsdf
asfsdf|erty|345|rty4|et64|wrt
.
.
.
regbg| f234|sgfgfg|v|||

Folder1 / file2包含

fs|dfg|hth|dvfbdgh|ryjn|cv
34t|fgsdhb|yttbvx|t8dghfr|grte|vf
.
.
.
sf vcv| ds||||

输出文件应为

34t|fgsdhb|yttbvx|t8dghfr|grte|vf
asfsdf|erty|345|rty4|et64|wrt
.
.
.
sddfas|sdfsda f|dfsd

注意:输出由前两个文件中的随机行填充,并在达到文件大小限制时退出(从[1MB,2MB]中随机选择 - 这意味着允许任何大小在1MB到2MB之间,并不意味着1MB或2MB)

1 个答案:

答案 0 :(得分:1)

使用随机内容生成文件的简便快捷方法:

dd if=/dev/random of="${filename}" bs="${size}" count=1

如果您需要更好的随机性,可以使用/dev/urandom但由于它不是基于伪随机数生成器,urandom要慢得多。

如果您想要单个文件中的N个随机行,请使用shuf

shuf -n "${numberOfLines}" "${filename}"

如果您需要来自一组文件的[X, Y]个字节的随机内容,那么命令行实用程序将不够用。如果您安装了脚本语言(Python,Perl),那么请编写一个小脚本来执行此操作。

如果“关闭足够好”,则可以使用

shuf folder/* | dd if=- of=sample.txt bs=1K count=2048

获取一个2MB的示例文件,然后您可以使用count

的不同数字再次缩短或调用上面的命令