Ответы:
Вы можете использовать shufкоманду из GNU coreutils . Утилита довольно быстрая и займет меньше минуты для перетасовки файла размером 1 ГБ.
Команда ниже может просто работать в вашем случае, потому что shufбудет читать весь ввод перед открытием выходного файла:
$ shuf -o File.txt < File.txt
brew install coreutilsи используй /usr/local/bin/gshuf.
cat myfile | perl -MList::Util=shuffle -e 'print shuffle(<STDIN>);' Я точно уверен, насколько быстро он будет бегать
Python однострочный:
python -c 'import sys, random; L = sys.stdin.readlines(); random.shuffle(L); print "".join(L),'
Читает все строки из стандартного ввода, перетасовывает их на месте, затем печатает их без добавления завершающей строки (обратите внимание ,на конец).
Для OSX бинарный файл называется gshuf.
brew install coreutils
gshuf -o File.txt < File.txt
Если, как и я, вы пришли сюда, чтобы найти альтернативу shufдля macOS, используйте randomize-lines.
Установить randomize-lines(homebrew) пакет, в котором есть rlкоманда, аналогичная функциональности shuf.
brew install randomize-lines
Usage: rl [OPTION]... [FILE]...
Randomize the lines of a file (or stdin).
-c, --count=N select N lines from the file
-r, --reselect lines may be selected multiple times
-o, --output=FILE
send output to file
-d, --delimiter=DELIM
specify line delimiter (one character)
-0, --null set line delimiter to null character
(useful with find -print0)
-n, --line-number
print line number with output lines
-q, --quiet, --silent
do not output any errors or warnings
-h, --help display this help and exit
-V, --version output version information and exit
Я забыл, где я нашел это, но вот shuffle.plчто я использую:
#!/usr/bin/perl -w
# @(#) randomize Effectively _unsort_ a text file into random order.
# 96.02.26 / drl.
# Based on Programming Perl, p 245, "Selecting random element ..."
# Set the random seed, PP, p 188
srand(time|$$);
# Suck in everything in the file.
@a = <>;
# Get random lines, write 'em out, mark 'em done.
while ( @a ) {
$choice = splice(@a, rand @a, 1);
print $choice;
}
По крайней мере, в Ubuntu есть программа под названием shuf
shuf file.txt