Причиной остановки процесса может быть awk
имеет ошибку / ограничение в массивах, с которыми сталкивается ваш код, или ваш код настолько занимает много места, что достигает некоторого ограничения на основе процесса.
Я имею в виду, вы пытаетесь построить массив с максимальным индексом 10 миллиардов (на основе диапазона
) с 1 миллиардом определенных значений. Итак, awk
потенциально необходимо зарезервировать место для 10 миллиардов переменных. Я недостаточно знаком, чтобы сказать, сколько места это будет означать, но 10 миллиардов 16-битных целых чисел означают 18,5 ГБ, и даже если awk
умен в построении такого разреженного массива, для этого потребуется более 1,8 GB просто так храните числа, которые вы генерируете.
Чтобы результаты оставались уникальными, вам нужно будет где-то хранить все предыдущие значения, поэтому это обязательно потребует много места, но может оказаться, что какой-то другой язык позволит завершить алгоритм.
Как же тогда избежать огромных требований к памяти?
А. Гордон предлагает один вариант, полагаясь на последовательность и просто перетасовывая ее для случайности. Это хорошо работает, когда требуется, чтобы результат действительно был числами, и вы хотите, чтобы они были из заданного диапазона.Если диапазон более сложный, чем от 1 до N, вы можете сгенерировать последовательность с помощью awk
, а затем передать ее в sort -R
. Также см. Мой комментарий к ответу о том, как сделать диапазон и количество произведенных чисел разными.
Одним из вариантов может быть использование криптографической (хеш-функции) для получения случайных чисел, но в этом случае вы не можете определить диапазон от 1 до N, поскольку эти функции обычно производят N-битный вывод, и вы не можете искажать результаты, не рискуя вызвать коллизию (повторяющееся число в наборе) .Такие функции, однако, гарантированно легко произведут 1 миллиард уникальных выходных данных (поскольку эти хеш-функции предназначены для того, чтобы не выдавать один и тот же результат дважды, даже большое количество повторных звонков). В зависимости от реализации их вывод может быть не числами, а строками, и можно было бы преобразовать строковый вывод в числа, но поскольку размер их вывода обычно довольно велик, тогда диапазон чисел, полученных в результате преобразования, будет действительно огромным. Вы можете начать с этого вопроса о стеке , если вам интересно изучить этот вариант.
Если вы рискуете столкнуться с конфликтом, даже если это маловероятно, вы можете попробовать использовать хороший источник случайности (/ dev / urandom - один из вариантов) для генерации 1 миллиарда чисел. Я не знаю, насколько вероятно, что из этого вы сможете получить 1 миллиард уникальных чисел, но попробовать это наверняка стоит того.Однако не существует эффективного способа узнать, есть ли дубликат в наборе результатов, поскольку для этого потребуется иметь все числа в памяти для сравнения.
/usr/share/themes/<your_theme_folder>/gnome-shell
.message-title
и .message-content
селектор