Создание большого файла с помощью терминала

Я хочу сделать файл, который является очень большим в размере для тестирования, который должен содержать уникальные слова (строго не повторенный). Это может в ГБ, ТБ, и т.д. май, я делаю это с терминалом?

Я использую  Ubuntu 16.04 (Гостеприимный Xerus).

7
задан 5 November 2016 в 04:38

5 ответов

Создание бесконечного числа слов, гарантируемых уникальными

Сценарий ниже генерирует гарантируемые уникальные слова от символов от алфавита. Проблема с любой фиксированной длиной символов - то, что она произведет ограниченный набор возможностей, ограничивая размер Вашего файла.

Я поэтому использовал python permutations, который производит (конечное) количество уникальных слов. Однако После использования всех комбинаций, мы просто запускаем, печатая слова 2, затем 3, четыре, n времена и т.д., каждое значение для n создаст новое уникальное слово. Таким образом у нас есть генератор для создания 100%, конечно, уникальные слова.

Сценарий:

import itertools
import string

ab = [c for c in string.ascii_lowercase]

t = 1
while True:   
    for n in range(1, len(ab)+1): 
        words = itertools.permutations(ab, n)
        for word in words:
            print(t*("".join(word)))
    t += 1

Как использовать

  • Просто скопируйте сценарий в пустой файл, сохраните его как unique_generator.py
  • Выполните его командой:

    python3 /path/to/unique_generator.py > /path/to/bigfile.txt
    

Примечание:

Сценарий производит уникальные слова различной длины. Если Вы хотите, запустите - или макс. длина может быть установлена путем изменения строк:

for n in range(1, len(ab)+1)

(замените запуск диапазона), и изменение:

while True:  

в (например):

while t < 10:   

В последнем случае длина слов макс. 10 раз алфавит.

Окончание процесса

  • При выполнении его от терминала просто нажмите Ctrl+C
  • Иначе:

    kill $(pgrep -f /path/to/unique_generator.py)
    

    должен сделать задание.

12
ответ дан 23 November 2019 в 06:07

Для получения большого файла, полного на случайных словах, используют следующую команду:

cat /dev/urandom | head -c 1000000 | tr -dc "A-Za-z0-9\n" | sort | uniq

Это создаст файл с unqiue словом на каждой строке и строках случайного текста. Можно увеличиться, размер файла делают 1 000 больших или меньших. Каждое количество равно примерно одному байту.

Для создания пространства слов разделенным просто пасуйте назад их до tr "\n" " ".

cat /dev/urandom | head -c 1000000 | tr -dc "A-Za-z0-9\n" | sort | uniq | tr "\n" " "

Это также избегает проблем производительности, связанных с циклами на оболочке.

6
ответ дан 23 November 2019 в 06:07

Если ограниченный алфавит и очень предсказуемый вывод прекрасны, следующее является, вероятно, самым быстрым (и наиболее играется в гольф :P), ответ:

seq 100

(если слова могут состоять из просто чисел), или:

seq 100 | tr 0-9 A-I

(если существует требование использовать фактические буквы).

3
ответ дан 23 November 2019 в 06:07

Можно также использовать /proc/sys/kernel/random/uuid в Linux для генерации UUID , который, как должны гарантировать, будет уникален:

[~]$ for i in {1..10}; do cat /proc/sys/kernel/random/uuid; done
c8072c40-32f5-4f14-8794-c3ab68e1a0f5
2f2630d8-0e17-4cba-8e62-586ee23f0ebb
97606886-f227-46f6-827a-141b0db57c59
5ffea57c-c3bf-4ba6-8c08-8a1b29ee8f6c
2b90f797-2def-4433-ae71-6f404db944fc
fcb793e9-6102-472d-a7a0-7bf5204dbee5
d84e2877-6804-4bed-85f0-0a551234425a
3d9445ca-335c-4960-83d5-6cb1bef8b9eb
913bce71-5c20-47f7-a22e-277be6856a57
8f232541-f8c1-46ba-b57a-0d11314c3483

можно удалить - символ с tr -d и затем перенаправить это в файл:

[~]$ for i in {1..10000}; do cat /proc/sys/kernel/random/uuid | tr -d '-' ; done > /tmp/words
[~]$ sort /tmp/words | uniq | wc -l
10000
3
ответ дан 23 November 2019 в 06:07

Самая простая острота для создания случайных строк символов:

while true; do echo $RANDOM | base64 >> BIGFILE.txt  ; done

или альтернативно:

while true; do echo $RANDOM | sha512sum  >> BIGFILE.txt ; done   

Для лучшей уникальности можно использовать /dev/urandom:

cat /dev/urandom | base64 

Завершите команду с Ctrl+C, когда Ваш файл достигнет желаемого размера

Считайте также случайную строку / генераторами пароля:

Таким образом, один из ответов там, может быть адаптирован, чтобы иметь это:

while true; do openssl rand -base64 20 ; done

В случае, если Вы не хотите использовать знаки пунктуации и числа, но использовать только буквы, затем мы можем использовать tr исправлять это:

while true; do openssl rand -base64 20 | tr -d '[[:digit:]][[:punct:]]'  ; done 

Для дополнительной случайности можно переставить символы сгенерированного строкового использования shuf.

while true; do openssl rand -base64 20 | fold -w1 | shuf | tr -d '\n' ; done

И т. д. и т. п. Вы могли даже передать вывод другому набору base64 или sha256sum команды для создания их еще более случайными.

Для тех, кому нравятся альтернативные языки кроме оболочки, вот острота Python:

python -c $'import string,random;i = [i for i in string.uppercase + string.lowercase + string.digits];\nwhile not random.shuffle(i): print "".join(i)'
6
ответ дан 23 November 2019 в 06:07

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

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