Самый быстрый способ создать файл 1-миллиметровых уникальных меток времени наносекунды

Вы также можете установить Extension Pack через графический интерфейс:

Сначала вы посетите страницу загрузки VirtualBox , там под заголовком
Virtualbox ... Extension Pack вы найдете ссылка Все поддерживаемые платформы . Щелчок по этой ссылке загружает пакет расширений.

Теперь в меню выберите Файл / Настройки

enter image description here

щелкните значок, который я пометил, чтобы выбрать файл расширения и продолжить.

Конечно, у метода командной строки есть большое преимущество: вы получаете его намного быстрее и вам не нужно прокручивать лицензионное соглашение ...

1
28.02.2014, 02:42
2 ответа

Ниже приведены 2 метода. Второй метод, который использует seq + date , чтобы имитировать то, о чем спрашивал ваш вопрос. Однако этот метод с использованием / dev / urandom и fold создаст случайные числовые строки любой длины, которую вы хотите.

Способ №1. Использование / dev / urandom + fold

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

$ tr -dc '0-9' </dev/urandom | fold -w 18 | head -n 1MB >1m-example.txt

Результатом будет следующий тип вывода:

$ head -5 1m-example.txt
405295373332357365
317790052799018265
512803158528955068
838448126037265342
014951048334094344

Время:

real    0m30.261s
user    0m1.700s
sys     0m29.976s

Метод №2. Использование seq + date

Примерно так будет генерировать пакетные данные, которые затем могут быть переданы по конвейеру до date за один вызов:

$ seq -f @%12.0f 1 1000000 | date -f - '+%s%N' > 1m-example.txt

Что происходит?

$ seq -f @%12.0f 1 1000000 | head -5
@           1
@           2
@           3
@           4
@           5

Результатом такого типа вывода:

$ seq -f @%12.0f 1 1000000 | head -5 | date -f - '+%s%N'
1000000000
2000000000
3000000000
4000000000
5000000000

] Time:

real    0m8.647s
user    0m3.547s
sys     0m5.971s

Но это кажется совершенно ненужным, поскольку вам, кажется, просто нужно 1MM строк случайных данных определенного формата / типа. В этом случае я бы сделал что-то вроде решения @Graeme , используя вместо этого printf с расширением скобок оболочки.

1
27.01.2020, 23:28

Если это просто произвольные отметки времени, тогда нет никакой реальной необходимости в дате (это просто числа, верно?). Как насчет чего-то вроде:

printf '1393548962358%s\n' {000000..999999} >1m-example.txt

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

yes now | head -n 1MB | date -f - +%s%N >1m-example.txt

Это оставит некоторое пространство между числами, которое зависит от естественной энтропии системы. Здесь следует обратить внимание на зависимость аппаратного обеспечения / реализации, поскольку полные наносекундные временные метки могут не поддерживаться, например, у вас может быть только миллисекунда или даже секунда. В этом случае у вас будут повторяющиеся числа с нулями в конце, которые, скорее всего, будут повторяться. Хотя у меня работает нормально!

Обновление

В качестве примечания: если вы пытаетесь создать отметки времени, которые будут читать до даты , вам нужно добавить @ , чтобы что дата будет интерпретировать их как отметки времени, а не как форматированные даты / время. Кроме того, требуется десятичная точка, поскольку date принимает временные метки только в секундах (а не в наносекундах). См. Следующий пример (и комментарии ниже):

printf '@1393548962.358%s\n' {000000..000005} | date -f - '+%F %T.%N'
2
27.01.2020, 23:28

Теги

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