Відповіді:
Ви можете використовувати 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 -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