shuf invocation (GNU Coreutils 9.0)
Next: uniq invocation, Previous: sort invocation, Up: Operating on sorted files [Contents][Index]
7.2 shuf: Shuffling text
shuf shuffles its input by outputting a random permutation of its input lines. Each output permutation is equally likely. Synopses:
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:
- ‘
-e’
‘--echo’ Treat each command-line operand as an input line.
- ‘
-i lo-hi’
‘--input-range=lo-hi’ 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 operation modes:
- ‘
-n count’
‘--head-count=count’ Output at most
countlines. By default, all input lines are output.- ‘
-o output-file’
‘--output=output-file’ Write output to
output-fileinstead of standard output.shufreads all input before openingoutput-file, so you can safely shuffle a file in place by using commands likeshuf -o F <Fandcat F | shuf -o F.- ‘
--random-source=file’ Use
fileas a source of random data used to determine which permutation to generate. See Random sources.- ‘
-r’
‘--repeat’ 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-countis not given,shufrepeats indefinitely.- ‘
-z’
‘--zero-terminated’ 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).
For example:
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
might output:
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 shuf might 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 output permutations.
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.
Next: uniq invocation, Previous: sort invocation, Up: Operating on sorted files [Contents][Index]