Need Randomness? Unleash the Power of “shuf”!
In the realm of command-line tools, sometimes the simplest utilities pack the biggest punch. shuf
, a part of GNU Core Utilities, is one such gem. It allows you to generate random permutations of input data, offering a versatile solution for tasks ranging from shuffling lists to selecting random samples. Get ready to explore the potential of this unassuming tool.
Overview: shuf – The Randomizer

shuf
is a command-line utility designed to generate random permutations of input lines. Unlike more complex scripting solutions, shuf
provides a straightforward and efficient way to randomize data directly from the terminal. Its ingenuity lies in its simplicity: it takes input (either from a file or standard input), rearranges the lines in a random order, and outputs the result to standard output. This makes it incredibly useful for a variety of tasks, including:
- Creating random playlists from a list of songs.
- Selecting a random subset of data for analysis or testing.
- Generating random passwords or codes.
- Simulating random events.
- Randomizing the order of questions in a quiz.
The elegance of shuf
is that it avoids unnecessary complexity, focusing on performing one task extremely well. This single-purpose design makes it easy to integrate into larger shell scripts and workflows.
Installation: Getting shuf

shuf
is typically included as part of the GNU Core Utilities package, which is pre-installed on most Linux distributions and available for macOS (often requiring installation via Homebrew or similar package managers). You likely already have it!
To check if shuf
is installed, simply open your terminal and type:
shuf --version
If shuf
is installed, you’ll see version information displayed. If not, follow the instructions below for your operating system.
Linux
On most Linux distributions (Debian, Ubuntu, Fedora, etc.), GNU Core Utilities, including shuf
, should already be present. If, for some reason, it’s missing, you can install the coreutils
package using your distribution’s package manager. For example, on Debian or Ubuntu:
sudo apt update
sudo apt install coreutils
On Fedora or Red Hat-based systems:
sudo dnf install coreutils
macOS
On macOS, you’ll typically need to install GNU Core Utilities using a package manager like Homebrew. If you don’t have Homebrew installed, you can install it from https://brew.sh/.
Once Homebrew is installed, run the following command to install GNU Core Utilities:
brew install coreutils
After installation, the GNU versions of these tools are prefixed with `g`. Therefore, you would use `gshuf` instead of `shuf` on macOS. To avoid this, you can add `/opt/homebrew/opt/coreutils/libexec/gnubin` to your `PATH` environment variable. Edit your `~/.zshrc` or `~/.bashrc` file and add the following line:
export PATH="/opt/homebrew/opt/coreutils/libexec/gnubin:$PATH"
Then, source your shell configuration file:
source ~/.zshrc # Or source ~/.bashrc
Now, you should be able to use shuf
directly.
Usage: Unleashing the Power of Randomization

shuf
offers a range of options to customize its behavior. Let’s explore some common use cases with practical examples.
Shuffling Lines from a File
The most basic usage involves shuffling lines from a file. Suppose you have a file named `names.txt` containing a list of names, one name per line:
Alice
Bob
Charlie
David
Eve
To shuffle the lines in this file and output the result to the terminal, use the following command:
shuf names.txt
The output will be a random permutation of the names in the file. Each time you run the command, the order will be different.
Shuffling Input from Standard Input
shuf
can also accept input from standard input. This is useful when you want to shuffle data generated by another command. For example, to shuffle the numbers 1 to 10, you can use the `seq` command and pipe the output to shuf
:
seq 1 10 | shuf
This will output the numbers 1 to 10 in a random order.
Selecting a Random Sample
Sometimes you only need a random subset of the input data. The `-n` option allows you to specify the number of lines to output.
To select 3 random names from the `names.txt` file, use the following command:
shuf -n 3 names.txt
This will output 3 randomly selected names from the file.
Generating a Random Range of Numbers
The `-i` option allows you to specify a range of numbers to shuffle. The syntax is `-i
shuf -i 1-100
Controlling the Random Seed
For reproducibility, you can control the random seed using the `–random-source=
Example:
shuf --seed=123 names.txt
Running this command multiple times with the same seed (123) will always produce the same shuffled output.
Repeating Shuffles
The `-r` or `–repeat` option allows you to repeat values. If this is specified, output values may be repeated. This may be useful for random sampling with replacement.
shuf -r -n 5 names.txt
This may output any of the names in names.txt, with repeats, up to 5 values.
Tips & Best Practices
- **Use
shuf
with pipes for powerful data manipulation:** Combineshuf
with other command-line tools likegrep
,awk
, andsed
to create complex data processing pipelines. - **Consider the size of your input:** For very large files,
shuf
might take some time to process. Be mindful of performance implications. - **Use seeds for reproducible results:** When you need to generate the same random sequence multiple times, use the `–seed` option to control the random number generator.
- **Test your scripts thoroughly:** Always test your scripts with sample data to ensure they behave as expected. Randomness can sometimes introduce unexpected behavior.
- **Read the manual page:** The
man shuf
command provides a comprehensive overview of all available options and their usage.
Troubleshooting & Common Issues
- **”command not found” error:** This usually indicates that
shuf
is not installed or not in your system’s `PATH`. Double-check the installation instructions and make sure the directory containingshuf
is in your `PATH`. - **Incorrect output:** If you’re getting unexpected output, carefully review your command syntax and the input data. Pay attention to options like `-n` and `-i` to ensure they’re used correctly.
- **Performance issues with large files:** If you’re working with extremely large files, consider using alternative approaches like streaming the data or using a more specialized tool for random sampling.
FAQ
- Q: Can I use
shuf
to generate random numbers? - A: Yes, using the `-i` option, you can generate a random permutation of a range of numbers.
- Q: How can I ensure the same random sequence every time?
- A: Use the `–seed` option followed by a specific number. The same seed will always produce the same sequence.
- Q: Is
shuf
available on all operating systems? - A:
shuf
is part of GNU Core Utilities, which is standard on most Linux distributions. It’s also available for macOS, typically through package managers like Homebrew (as `gshuf`). - Q: Can I shuffle lines containing spaces?
- A: Yes,
shuf
handles lines with spaces correctly. - Q: How can I select multiple random samples without replacement?
- A:
shuf
by default shuffles *without* replacement. If you want replacement, you should specify `-r` or `–repeat` options.
Conclusion
shuf
is a powerful and versatile command-line tool for generating random permutations and selecting random samples. Its simplicity and efficiency make it an invaluable addition to any command-line toolkit. Whether you’re creating random playlists, selecting random subsets of data, or simulating random events, shuf
provides a quick and easy solution. Embrace the power of randomness and give shuf
a try today! For more details and advanced usage, consult the official GNU Core Utilities documentation or the man shuf
page. You can also visit the GNU Core Utilities project page for further information and updates.