Need Random Data? Unleash the Power of Shuf!
Have you ever needed to randomize a list, create a random sample from a dataset, or simply shuffle the order of lines in a file? The shuf
command-line utility is your answer. This unassuming tool, part of the GNU Core Utilities, provides a simple yet powerful way to generate random permutations of input data, making it invaluable for tasks ranging from data analysis to generating random passwords. Let’s explore how shuf
can simplify your workflow.
Overview: The Beauty of Randomness with Shuf

shuf
, short for “shuffle,” is a command-line tool designed to produce random permutations of its input. It reads lines from the input (which can be standard input or files), shuffles them randomly, and writes the shuffled output to standard output. Its elegance lies in its simplicity and versatility. Unlike more complex scripting solutions, shuf
provides a dedicated, optimized solution for shuffling data. Think of it as a digital card shuffler, perfectly suited for dealing with text data. The ingenuity is in the efficiency with which it achieves randomness, making it suitable for large datasets and scripting scenarios where unpredictability is key.
Installation: Getting Shuf on Your System

As part of the GNU Core Utilities, shuf
is pre-installed on most Linux distributions. If, for some reason, it’s missing, you can install the coreutils
package using your distribution’s package manager. Here’s how you can typically install it on common systems:
- Debian/Ubuntu:
sudo apt update
sudo apt install coreutils
sudo dnf install coreutils
brew install coreutils
After installing on MacOS, you may need to alias gshuf to shuf:
alias shuf=gshuf
Once installed, verify that shuf
is available by typing:
shuf --version
This command should display the version information of the shuf
utility.
Usage: Practical Examples of Shuf in Action

Let’s dive into some practical examples of how to use shuf
effectively:
- Shuffling Lines from a File:
- Shuffling Input from Standard Input:
- Generating a Random Sample:
- Generating a Range of Numbers:
- Generating Unique Random Numbers:
- Repeating Random Selections:
- Controlling the Random Seed:
The most basic use case is shuffling the lines of 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 these names randomly, simply use:
shuf names.txt
The output will be a random permutation of the names, printed to your terminal. Note that the original names.txt
file remains unchanged.
shuf
can also read from standard input. This allows you to pipe data from other commands. For example, to shuffle a sequence of numbers generated by seq
:
seq 1 10 | shuf
This will generate the numbers 1 through 10 and then shuffle them randomly. Each number will appear exactly once in the output, but in a randomized order.
To select a random sample of n
lines from a file, use the -n
option:
shuf -n 3 names.txt
This will output 3 random names from the names.txt
file. The -n
option is invaluable for creating training datasets, randomly selecting participants, or performing other sampling tasks.
You can use shuf
to generate a random permutation of a range of numbers using the -i
option:
shuf -i 1-10
This will generate a random ordering of the numbers 1 through 10, equivalent to using seq 1 10 | shuf
, but potentially more efficient.
Often, you need to generate a set of unique random numbers within a certain range. Combining `shuf` with other tools provides a simple solution:
shuf -i 1-100 | head -n 5
This command generates a random permutation of numbers from 1 to 100, then uses `head` to select the first 5, effectively giving you 5 unique random numbers between 1 and 100.
By default, `shuf` will select each input line only once. You can change this behavior using the `-r` (or `–repeat`) option. This allows for repeated random selections, which can lead to the same line appearing multiple times in the output.
shuf -n 5 -r names.txt
This command selects 5 names from `names.txt` randomly, allowing repetition. A name could appear zero, one, or multiple times in the output.
For reproducibility, you can set a specific random seed using the --random-source
option. This is useful for testing or if you need to generate the same sequence of random numbers repeatedly.
shuf --random-source=<(echo 1234) names.txt
This will seed the random number generator based on the specified number. Note that the specific syntax used above is specific to bash and avoids creating a temporary file.
Tips & Best Practices: Maximizing Shuf's Potential

- Handle Large Files Efficiently:
shuf
is designed to handle large files efficiently. However, for extremely large files, consider using the--head-count
option in conjunction with other tools to process the data in chunks if memory becomes a concern. - Combine with Other Utilities:
shuf
is most powerful when combined with other command-line utilities. Use pipes to chain commands together to perform complex data manipulations. - Use the Right Options: Carefully choose the options that best suit your needs. For instance, use
-n
to control the number of output lines,-r
for repeated selections, and--random-source
for reproducibility. - Be Mindful of Randomness: While
shuf
provides good randomness, it's not suitable for cryptographic purposes. If you need truly random numbers for security-sensitive applications, use dedicated cryptographic random number generators. - Consider the Size of Your Data: When using `-n` to sample from a file, be aware that if `n` is larger than the number of lines in the input, `shuf` will output all the lines in a random order (without repetition). If you want to allow repetition, use the `-r` option.
Troubleshooting & Common Issues

- "shuf: command not found": This error indicates that
shuf
is not installed or not in your system's PATH. Follow the installation instructions above to resolve this. - Unexpected Output: If you're not getting the expected random output, double-check your command-line options. Make sure you're using the correct syntax and options for your desired outcome. Use `man shuf` to consult the manual page for detailed information.
- Permissions Issues: If you're trying to shuffle a file and get a "Permission denied" error, ensure that you have read permissions on the file.
- Memory Errors (for very large files): If you are shuffling an extremely large file and encounter memory errors, consider using a combination of `split` (to split the file into smaller chunks), `shuf` (on each chunk), and `cat` (to concatenate the shuffled chunks). However, be aware that this approach will not guarantee a perfectly uniform random permutation of the entire file, but it can provide a reasonable approximation while staying within memory limits.
FAQ: Shuf Command-Line Utility

- Q: What is the primary purpose of the
shuf
command? - A:
shuf
is used to generate random permutations of input lines, making it ideal for shuffling data or creating random samples. - Q: How can I select a random sample of 10 lines from a file called
data.txt
? - A: Use the command:
shuf -n 10 data.txt
. - Q: Can I use
shuf
to generate random numbers? - A: Yes, you can use
shuf -i
followed by a range to generate a random ordering of numbers within that range. - Q: Is
shuf
suitable for generating cryptographic-quality random numbers? - A: No,
shuf
is not designed for cryptographic purposes. Use dedicated cryptographic random number generators for security-sensitive applications. - Q: How do I ensure that the
shuf
command produces the same random output every time? - A: Use the
--random-source
option to specify a fixed random seed.
Conclusion: Embrace the Power of Randomization
shuf
is a simple yet powerful command-line tool that offers a convenient way to shuffle data, generate random samples, and perform other tasks involving randomness. Its integration into the GNU Core Utilities and its ease of use make it an invaluable addition to any command-line toolkit. Whether you're a data scientist, system administrator, or developer, shuf
can streamline your workflow and add an element of unpredictability to your scripts. Give shuf
a try and discover the endless possibilities it unlocks!
Explore the official GNU Core Utilities documentation for more details and advanced usage scenarios: GNU Core Utilities.