Заполнить файл повторяющимся постоянным значением? - PullRequest
0 голосов
/ 28 апреля 2018

Я бы хотел использовать стандартные утилиты, а не скомпилированный код, чтобы эффективно заполнять файл постоянным значением, повторяемым N раз. В простой версии значение представляет собой один байт; в сложной версии - произвольная строка.

Примечание:

  • Если значение равно 0, у нас есть dd if=/dev/zero of=/path/to/file bs=XXX count=YYY для соответствующих значений XXX и YYY.
  • Очевидно, мы можем сделать это с помощью echo $value >> file, выполненного в цикле, но это должно быть очень медленно.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

Вы можете использовать Perl следующим образом:

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

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

Итак, 5 ГБ за 3 секунды.

0 голосов
/ 28 апреля 2018

Давайте возьмем

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"

(Если я не "заключу" в заключительную команду, есть проблема с расширением ${file_length}). Это имеет пропускную способность около 0,6 секунд / МБ в моей системе.

Если строка заканчивается новой строкой, все становится проще:

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

И если в строке нет перевода строки, мы также можем сделать это:

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