用重复的常量值填充文件?

时间:2018-04-28 19:50:23

标签: bash shell file-io replicate

我想使用标准实用程序而不是编译代码来有效地填充具有常量值的文件,重复N次。在简单版本中,值是单个字节;在复杂版本中 - 任意字符串。

注意:

  • 如果值为0,则我们dd if=/dev/zero of=/path/to/file bs=XXX count=YYY表示适当的XXX和YYY值。
  • 我们显然可以在循环中完成echo $value >> file,但这应该非常慢。

2 个答案:

答案 0 :(得分:1)

我们采取

value_to_replicate="whatever"
file_length=65536
output_file="/path/to/file"

例如。

根据@ dmadic的建议,我们可以这样做:

bash -c "printf ${value_to_replicate}%.0s {1..${file_length}} > $output_file"

(如果我没有"#34;最后的命令,那么${file_length}的扩展存在问题。这在我的系统上的吞吐量约为0.6秒/ MB。

如果字符串以换行符结尾,则事情变得更简单:

yes "$value_to_replicate" | head -$file_length > $output_file

如果字符串没有换行符,我们也可以这样做:

yes "$value_to_replicate" | head -$file_length | tr -d '\n' > $output_file

答案 1 :(得分:0)

您可以使用Perl,如下所示:

time perl -e 'print "Hello"x1000000000' > /dev/null

real    0m2.930s
user    0m1.778s
sys     0m1.151s

所以,3秒内5GB。