Antworten:
Sie können den shufBefehl von GNU coreutils verwenden . Das Dienstprogramm ist ziemlich schnell und würde weniger als eine Minute dauern, um eine 1-GB-Datei zu mischen.
Der folgende Befehl funktioniert möglicherweise nur in Ihrem Fall, da shufdie vollständige Eingabe vor dem Öffnen der Ausgabedatei gelesen wird:
$ shuf -o File.txt < File.txt
brew install coreutilsund verwenden /usr/local/bin/gshuf.
cat myfile | perl -MList::Util=shuffle -e 'print shuffle(<STDIN>);' Ich bin mir sicher, wie schnell es laufen würde
Python-Einzeiler:
python -c 'import sys, random; L = sys.stdin.readlines(); random.shuffle(L); print "".join(L),'
Liest alle Zeilen von der Standardeingabe, mischt sie an Ort und Stelle und druckt sie dann aus, ohne eine abschließende neue Zeile hinzuzufügen (beachten Sie die ,vom Ende).
Für OSX wird die Binärdatei aufgerufen gshuf.
brew install coreutils
gshuf -o File.txt < File.txt
Wenn Sie wie ich hierher gekommen sind, um nach einer Alternative zu shufmacOS zu suchen, dann verwenden Sie randomize-lines.
Installieren Sie das randomize-lines(Homebrew-) Paket, das einen rlBefehl mit ähnlichen Funktionen wie hat 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
Ich habe vergessen, wo ich das gefunden habe, aber hier ist das shuffle.pl, was ich benutze:
#!/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;
}
Zumindest in Ubuntu gibt es ein Programm namens shuf
shuf file.txt