Install shuf on OS X?

Ubuntu Linux has a great tool called shuf, which works like head except that it gives you ten random lines. I couldn't find it on Homebrew. What is the simplest way of installing it on OS X?


Solution 1:

You can install coreutils with brew install coreutils.

shuf will be linked as gshuf. Read the caveats when you install coreutils.

Solution 2:

Yet another solution is to learn about the tools supplied by the vendor. Certainly you could chain jot, paste, sort, cut, head and get the same results.

jot -r "$(wc -l FILE)" 1 |
paste - FILE |
sort -n |
cut -f 2- |
head -n 10
  • jot produces a random number from 1 to the number of lines in FILE for each line
  • paste pastes the random number to each line in FILE
  • sort sorts numeric each line
  • cut removes the random number from each line
  • head outputs the first 10 lines

Solution 3:

You can install coreutils with Macports as

sudo port install coreutils

This will put GNU core utils in /opt/local/bin with a g prepended

e.g. gshuf

More details on the package coreutils.

Solution 4:

Another option is to install randomize-lines(homebrew) package, which has an rl command which has similar functionality to shuf.

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

Solution 5:

You can use sort -R

$ seq 5 | sort -R
2
3
4
1
5