Need Randomness? Unleash the Power of “shuf”!
Ever found yourself needing a quick and easy way to randomize a list? Perhaps you want to select a random sample of lines from a file, or shuffle a deck of cards represented as text? The shuf
command is your answer! This unassuming yet powerful tool, part of the GNU Core Utilities, provides a simple way to generate random permutations of input, making it invaluable for tasks ranging from data analysis to game development.
Overview: Shuffling Made Simple

The shuf
command does one thing, and it does it well: it takes input, shuffles it, and outputs the randomized result. What makes shuf
so ingenious is its simplicity and versatility. It can read input from a file, standard input, or generate a sequence of numbers, then present them in a completely random order. This makes it perfect for tasks that require a degree of unpredictability or unbiased sampling.
Think of it as a digital deck of cards. You give shuf
a list of card names, and it deals them back to you in a randomized order. But it’s not just for playing card games; you can use it to randomize server lists for A/B testing, generate unique identifiers, or even choose a random winner from a list of names. The possibilities are endless, limited only by your imagination (and the data you feed it).
Installation: Getting Started with Shuf

Since shuf
is part of GNU Core Utilities, it’s likely already installed on your Linux or macOS system. You can verify its presence by simply typing shuf --version
in your terminal. If it’s not found, you’ll need to install the `coreutils` package.
On Debian/Ubuntu-based systems, use:
sudo apt-get update
sudo apt-get install coreutils
On Fedora/RHEL/CentOS-based systems, use:
sudo yum install coreutils
On macOS, you can install it via Homebrew:
brew install coreutils
After installation on macOS, the command will be available as gshuf
(g for GNU).
Once installed, you’re ready to start shuffling!
Usage: Unleashing the Power of Shuf

Here are some practical examples of how to use the shuf
command:
1. Shuffling Lines from a File
This is the most common use case: shuffling the lines of a text file. Suppose you have a file named `names.txt` containing a list of names, one name per line.
To shuffle the lines in the file, simply run:
shuf names.txt
This will print the names in a random order to your terminal. The original `names.txt` file remains unchanged.
2. Shuffling Standard Input
shuf
can also read from standard input. This is useful when you want to pipe the output of another command into shuf
.
For example, to shuffle the list of files in your current directory, you can use:
ls | shuf
This command first lists all files and directories in the current directory using ls
, and then pipes the output to shuf
, which shuffles the list.
3. Generating a Random Sample
Sometimes you only need a random subset of the input. The -n
option lets you specify the number of lines to output.
To select 3 random names from `names.txt`, use:
shuf -n 3 names.txt
This will output 3 randomly selected lines from the file. If the file has fewer than 3 lines, it will output all the lines in a random order.
4. Generating a Random Sequence of Numbers
shuf
can also generate a sequence of numbers and shuffle them. Use the -i
option to specify the range of numbers.
To generate a random permutation of the numbers from 1 to 10, use:
shuf -i 1-10
This will output the numbers 1 through 10 in a random order, each on a new line.
5. Controlling the Random Seed
For reproducibility, you can specify a random seed using the --random-source
option. This allows you to generate the same sequence of random numbers every time you run the command with the same seed.
shuf --random-source=seed names.txt
Replace “seed” with your desired seed value (it must be a valid file path). Using the same seed will produce the same shuffled output.
6. Handling Empty Input
By default, if shuf
receives empty input, it outputs nothing. You can change this behavior by using the `-e` (treat each argument as an input line) option to produce a single empty line.
echo "" | shuf
This command will output an empty line.
Tips & Best Practices: Mastering Shuf
- Use
shuf
for unbiased sampling: When you need a random sample from a dataset,shuf
ensures that each item has an equal chance of being selected. - Combine with other tools:
shuf
shines when combined with other command-line utilities likegrep
,sed
, andawk
to perform complex data manipulations. - Be mindful of large files: Shuffling very large files can be memory-intensive. Consider using more specialized tools for extremely large datasets.
- Use seeds for testing: When testing scripts that use
shuf
, use a fixed seed to ensure consistent and predictable results. - Read the manual: The
man shuf
command provides comprehensive documentation on all ofshuf
‘s options and features.
Troubleshooting & Common Issues
- “shuf: command not found”: This usually means that the `coreutils` package is not installed or that it’s not in your system’s PATH. Follow the installation instructions above.
- Incorrect number of output lines: Double-check the
-n
option to ensure you’re specifying the correct number of lines. Remember that if the input has fewer lines than specified with `-n`, it will output all the lines. - Unexpected output: If you’re piping input to
shuf
, make sure the input is in the expected format (e.g., one item per line). - Non-reproducible results: If you need reproducible results, always use the
--random-source
option to specify a random seed.
FAQ: Frequently Asked Questions about Shuf
- Q: Can I use
shuf
to shuffle columns instead of lines? - A: No,
shuf
is designed to shuffle lines. To shuffle columns, you’ll need to use a more complex script or a different tool likeawk
in combination withshuf
to manipulate the data before shuffling. - Q: Is
shuf
suitable for cryptographic applications? - A: No,
shuf
‘s random number generator is not cryptographically secure. Do not use it for applications that require strong randomness, such as generating encryption keys. - Q: How can I shuffle a list of numbers without generating a new line for each number?
- A: You can use the `tr` command to remove newlines after the shuffling is complete:
shuf -i 1-10 | tr '\n' ' '
. This will output the numbers separated by spaces. - Q: Can I use
shuf
on Windows? - A: While
shuf
is a native Unix/Linux command, you can use it on Windows by installing a Unix-like environment such as Cygwin or the Windows Subsystem for Linux (WSL). - Q: How to use shuf with a custom delimiter?
- A:
shuf
by default uses newlines as delimiters. However, you can preprocess and postprocess your data with tools like `tr` or `sed`. For instance, to shuffle comma-separated values, replace commas with newlines, shuffle, and then replace newlines back with commas.
Conclusion: Embrace the Randomness!
The shuf
command is a valuable addition to any command-line user’s toolkit. Its simplicity and power make it perfect for a wide range of tasks that require randomness. Whether you’re sampling data, generating permutations, or just adding a bit of unpredictability to your workflow, shuf
has you covered. So, go ahead and give it a try! Explore the man shuf
page for more advanced options and discover how shuf
can streamline your command-line adventures. Visit the GNU Core Utilities page for more information on shuf
and other essential utilities.