Answers:
您可以使用GNU coreutils中的shuf
命令。该实用程序非常快,只需1分钟即可完成1 GB文件的重新整理。
下面的命令可能只适合您的情况,因为shuf
在打开输出文件之前,它将读取完整的输入:
$ shuf -o File.txt < File.txt
brew install coreutils
并使用/usr/local/bin/gshuf
。
cat myfile | perl -MList::Util=shuffle -e 'print shuffle(<STDIN>);'
我注意到它运行的速度有多快
对于OSX,二进制文件称为gshuf
。
brew install coreutils
gshuf -o File.txt < File.txt
如果像我一样,您是来这里寻找shuf
macOS 的替代版本,然后使用randomize-lines
。
安装randomize-lines
(自制)软件包,该软件包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;
}