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?
5 Answers
You can install coreutils with brew install coreutils
.
shuf
will be linked as gshuf
. Read the caveats when you install coreutils.
-
2The caveat just seems to be that you shouldn't use the tools' proper names, but prefix them with g (like "gshuf"), right? Aug 22, 2014 at 16:35
-
2Yep, or optionally configure your PATH so you get what you expect. Aug 22, 2014 at 16:39
-
3
brew install coreutils
installs the utils with the prefixg
by default on osx, so you can install it using the above command. Jun 17, 2015 at 13:37 -
1Mac OS X Catalina 10.15+, with bash enabled as the shell, does install the
shuf
command along withgshuf
.– rjurneyJan 23, 2020 at 19:20
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
-
2I really like the essence of this answer, you never know when you might want to do the same thing on another machine where you aren't able to install extra tools for whatever reason– forquareAug 7, 2015 at 21:02
-
1I had never heard about
jot
before. Thanks for expanding my knowledge. Feb 7, 2018 at 11:16 -
While this answer kind of works, by default jot doesn't generate that much randomness, in the current version it seems like it only generates integers from 1 to 100, so while this will give you a different ordering of lines, it will be far from the uniform ordering you'd get from
shuf
– ErikSep 20, 2020 at 14:41
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.
-
2
-
-
@tommy.carstensen Then ask your admin - they will have made it difficult for you to do this for a reason– mmmmmmFeb 7, 2018 at 14:33
You can use sort -R
$ seq 5 | sort -R
2
3
4
1
5
-
3
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