shuf: Shuffling text
shuf shuffles its input by outputting a random permutation
of its input lines. Each output permutation is equally likely.
shuf [option]… [file] shuf -e [option]… [arg]… shuf -i lo-hi [option]…
shuf has three modes of operation that affect where it
obtains its input lines. By default, it reads lines from standard
input. The following options change the operation mode:
Treat each command-line operand as an input line.
Act as if input came from a file containing the range of unsigned decimal integers lo…hi, one per line.
shuf’s other options can affect its behavior in all
Output at most count lines. By default, all input lines are output.
Write output to output-file instead of standard output.
shuf reads all input before opening
output-file, so you can safely shuffle a file in place by using
shuf -o F <F and
cat F | shuf -o F.
Use file as a source of random data used to determine which permutation to generate. See Sources of random data.
Repeat output values, that is, select with replacement. With this
option the output is not a permutation of the input; instead, each
output line is randomly chosen from all the inputs. This option is
typically combined with --head-count; if
--head-count is not given,
Delimit items with a zero byte rather than a newline (ASCII LF). I.e., treat input as items separated by ASCII NUL and terminate output items with ASCII NUL. This option can be useful in conjunction with ‘perl -0’ or ‘find -print0’ and ‘xargs -0’ which do the same in order to reliably handle arbitrary file names (even those containing blanks or other special characters).
shuf <<EOF A man, a plan, a canal: Panama! EOF
might produce the output
Panama! A man, a canal: a plan,
Similarly, the command:
shuf -e clubs hearts diamonds spades
clubs diamonds spades hearts
and the command ‘shuf -i 1-4’ might output:
4 2 1 3
The above examples all have four input lines, so
produce any of the twenty-four possible permutations of the input. In
general, if there are n input lines, there are n! (i.e.,
n factorial, or n * (n - 1) * … * 1) possible
To output 50 random numbers each in the range 0 through 9, use:
shuf -r -n 50 -i 0-9
To simulate 100 coin flips, use:
shuf -r -n 100 -e Head Tail
An exit status of zero indicates success, and a nonzero value indicates failure.