有没有办法生成一个范围内的任何大小的文件(以字节为单位提供输入:例如: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)
答案 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