Как создать файл из терминального повторения ряд слов бесконечно?

Как создать файл из терминального повторения ряд слов бесконечно? Мне нужен он для создания огромного файла для парсинга целей как 2-4GB в размере. В настоящее время я вручную копирую строки вставки в тот же файл для увеличения размера.

19
задан 26 September 2016 в 22:55

7 ответов

Существует простой способ повторить строку много времен:

yes we have no bananas | head -n 10000 > out.txt

приведет к out.txt, содержащему 10 000 строк все высказывание, "у нас нет бананов".

<час>

Для ограничения вывода точным числом байтов используйте head -c опция вместо -n. Например, это генерирует точно 10 КБ текста:

yes we have no bananas | head -c 10000 > out.txt
50
ответ дан 23 November 2019 в 01:55

Я не могу рекомендовать бесконечно повторяющийся текст, но Вы могли сделать ~2GB файл повторного текста с Python как так...

python3 -c 'with open("bigfile", "w") as f: f.write(("hello world "*10+"\n")*2*10**7)'

, Который распечатает "привет мир" 10 раз и сделает новую строку и повторит что 20,000,000 раз, пишущий результат в файл bigfile. Если всеми Вашими символами является ASCII, то каждый - один байт, поэтому вычислите соответственно в зависимости от того, что Вы хотите записать...

Ваш CPU может принадлежать. У меня заканчивается RAM, если я пытаюсь делать больше чем 10 000 000 строк...

я выполняю тостер хотя

10
ответ дан 23 November 2019 в 01:55

Perl имеет остроту x оператор:

$ perl -e 'print "foo\n" x 5'
foo
foo
foo
foo
foo

Так, как простое решение, Вы могли просто записать свою строку несколько миллионов раз. Например, эта команда создала файл 3G:

perl -e 'print "This is my line\n" x 200000000' > file

, Если необходимо указать точный размер (2 гибибайта в этом случае), можно сделать:

perl -e 'use bytes; while(length($str)<2<<20){ $str.="This is my line\n"} print "$str\n"' > file
9
ответ дан 23 November 2019 в 01:55

сначала огня команда:

dd if=/dev/urandom of=file.txt bs=2048 count=10

создаст файл на пути размера bs*count случайные байты, в нашем случае 2048*10 = 20 КБ, которые могут быть изменены согласно требованию.

cat - > file.txt

Это управляет перенаправлениями STDIN в файл, таким образом, необходимо будет ввести две строки и затем нажать Ctrl+D. Затем необходимо будет выполнить следующую команду:

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

, Где n является целым числом. Это создаст файл с 2^ (n+1) строки в нем путем дублирования исходных двух строк. Таким образом для создания файла с 16 строками Вы сделали бы:

for i in {1..3}; do cat file.txt file.txt > file2.txt && mv file2.txt file.txt; done

Вот еще некоторые числа для запущения Вас:

n=15 will give you 65536 lines (if the original two lines were 'hello' and 'world' the file will be 384Kb)
n=20 will give you 2097152 lines (12Mb file with 'hello' and 'world' as the two starting lines)
n=25 will give you 67108864 lines (384Mb file with 'hello' and 'world' as the two starting lines)
4
ответ дан 23 November 2019 в 01:55

FIFOs, вероятно, что Вы ищете. Вместо того, чтобы назвать Вашу программу с данным файлом, можно связать результат команды оболочки к нему через , замена процесса и программа будет рассматривать свой вывод как файл простого текста. Преимущество здесь состоит в том, что Вы больше не ограничиваетесь Вашим дисковым пространством, таким образом, можно достигнуть размеров файла, которые были бы невозможны иначе, пока программа не должна буферизовать весь файл сначала и может просто проанализировать его линию за линией. Например, использование @hobbs' отвечает для генерации содержания:

wc -c <(yes we have no bananas | head -n 5000000000)

Это предоставляет мне файл на 95 гигабайтов (согласно туалету) бесплатно в пространстве жесткого диска и едва любой RAM, как раз для буферизации то, что возвращает команда, прежде чем это будет считано. Это о как близко к "бесконечно", когда Вы собираетесь добраться.

4
ответ дан 23 November 2019 в 01:55
  • Поместите набор слов, которые будут повторены в файле, например. source.txt. Получите размер source.txt, в байтах, например:

     stat -c '%s' source.txt
    
  • Решите размер целевого файла, например. destination.txt, 2 ГБ или 4 ГБ или что бы то ни было. Преобразуйте размер в байтах.

  • Разделите целевой размер файла на исходный размер файла. bash не может сделать арифметики с плавающей точкой, но это не нужно в этом случае.

  • Используйте a for создайте для повторения a cat source.txt операция времена результата подразделения. Это было бы самым близким приблизительный из целевого размера файла, который можно получить повторением. Вывод операции сохраняется в destination.txt.

Например, принятие source.txt имеет 30 байтов, и мы хотим создать файл на 2 ГБ, нам нужно:

for ((i=0; i<=((16777216/30)); i++)); do cat source.txt; done >destination.txt

Здесь я устанавливаю верхний предел ((16777216/30)) во время инициализации; можно получить результат и поместить его здесь также.

Операция заняла бы время; большее source.txt, меньше времени будет необходимо.

7
ответ дан 23 November 2019 в 01:55

Можно также использовать a while- цикл.

Пример: содержание foo.txt (Это - Ваш источник):

foo
bar
foobar

bar.txt пусто (Это - Ваш конечный файл). Вы можете теперь rn следующий цикл для записи содержания foo.txt многократно в bar.txt:

while [ $(stat --format "%s" bar.txt) -lt 150 ] 
do 
    cat foo.txt >> bar.txt
done

Объяснение:

  • stat --format "%s" bar.txt отображает размер bar.txt в байтах.
  • while [ $(stat --format "%s" bar.txt) -lt 150 ] следующие действия будут повторены, пока целевой размер (в этом случае 150 байтов) не достигнут.
  • cat foo.txt >> bar.txt добавьте содержание foo.txt кому: bar.txt
6
ответ дан 23 November 2019 в 01:55

Другие вопросы по тегам:

Похожие вопросы: