Я хочу сделать файл, который является очень большим в размере для тестирования, который должен содержать уникальные слова (строго не повторенный). Это может в ГБ, ТБ, и т.д. май, я делаю это с терминалом?
Я использую Ubuntu 16.04 (Гостеприимный Xerus).
Сценарий ниже генерирует гарантируемые уникальные слова от символов от алфавита. Проблема с любой фиксированной длиной символов - то, что она произведет ограниченный набор возможностей, ограничивая размер Вашего файла.
Я поэтому использовал 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 раз алфавит.
Иначе:
kill $(pgrep -f /path/to/unique_generator.py)
должен сделать задание.
Для получения большого файла, полного на случайных словах, используют следующую команду:
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" " "
Это также избегает проблем производительности, связанных с циклами на оболочке.
Если ограниченный алфавит и очень предсказуемый вывод прекрасны, следующее является, вероятно, самым быстрым (и наиболее играется в гольф :P), ответ:
seq 100
(если слова могут состоять из просто чисел), или:
seq 100 | tr 0-9 A-I
(если существует требование использовать фактические буквы).
Можно также использовать /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
Самая простая острота для создания случайных строк символов:
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)'