Need Random Data? Master the ‘shuf’ Command Now!
Have you ever needed to generate a random sample from a list, shuffle the lines of a file, or create a deck of cards in your terminal? The shuf
command is a powerful and often overlooked tool that can handle these tasks and more. Part of the GNU Core Utilities, shuf
provides a simple yet effective way to create random permutations of your input. Let’s dive into how to install, use, and master this handy command-line utility.
Overview of the ‘shuf’ Command

The shuf
command is a gem within the GNU Core Utilities, designed to output random permutations of input. Its ingenuity lies in its simplicity and versatility. Instead of writing complex scripts to randomize data, shuf
offers a clean, efficient solution right from your terminal. Whether you’re dealing with a list of names, a text file, or a sequence of numbers, shuf
can quickly generate a randomized version. This makes it incredibly useful for tasks ranging from generating random passwords to selecting random participants for a raffle. It’s a great tool for automation and scripting scenarios where randomness is needed.
Installation of ‘shuf’

Since shuf
is part of the GNU Core Utilities, it’s typically pre-installed on most Linux distributions. However, if you find that it’s missing or you want to ensure you have the latest version, you can install or update it using your distribution’s package manager.
On Debian/Ubuntu-based systems, you can use:
sudo apt update
sudo apt install coreutils
On Fedora/CentOS/RHEL-based systems, use:
sudo dnf install coreutils
On macOS, you can use Homebrew:
brew install coreutils
After installation, verify that shuf
is available by checking its version:
shuf --version
Usage: Unleashing the Power of ‘shuf’

The shuf
command is straightforward to use. Here are some common use cases with step-by-step examples:
1. Shuffling Lines from a File
One of the most common uses of shuf
is to shuffle the lines of a text file. This can be useful for randomizing survey responses, shuffling a playlist, or any other scenario where you need to randomize the order of lines in a file.
Let’s say you have a file named names.txt
with a list of names, one per line:
Alice
Bob
Charlie
David
Eve
To shuffle the lines in this file and output the result to the terminal, use:
shuf names.txt
The output will be a random permutation of the lines in names.txt
:
Eve
Charlie
Bob
Alice
David
To save the shuffled output to a new file, you can redirect the output using >
:
shuf names.txt > shuffled_names.txt
2. Generating a Random Sample
shuf
can also be used to generate a random sample from a larger dataset. The -n
option allows you to specify the number of lines to output.
To select a random sample of 3 names from names.txt
, use:
shuf -n 3 names.txt
The output will be 3 randomly selected names:
Bob
Eve
David
3. Generating Random Numbers
shuf
can generate random numbers within a specified range using the -i
option. This is useful for creating random IDs, generating test data, or simulating random events.
To generate a random permutation of numbers from 1 to 10, use:
shuf -i 1-10
The output will be a random permutation of the numbers 1 through 10:
5
8
2
1
9
3
7
4
10
6
To generate a random sample of 5 numbers from the range 1 to 10, use:
shuf -n 5 -i 1-10
The output will be 5 randomly selected numbers from the range 1 to 10:
3
9
2
6
1
4. Shuffling Input from Standard Input
shuf
can also read input from standard input, allowing you to pipe data from other commands directly into shuf
.
For example, to generate a sequence of numbers using seq
and then shuffle them, use:
seq 1 20 | shuf
This will generate a random permutation of the numbers from 1 to 20.
5. Repeating the Shuffle
By default, shuf
will output each line or number only once. If you want to allow repetition, use the -r
(or --repeat
) option.
shuf -n 5 -i 1-3 -r
This will produce 5 random numbers, drawing from the set {1, 2, 3} with replacement, thus allowing each number to appear more than once.
6. Specifying a Random Seed
For reproducible results, you can specify a random seed using the --random-source
option. This can be useful for testing or when you need to generate the same sequence of random numbers repeatedly.
First, create a file containing random bytes. You can do this using /dev/urandom
:
head -c 16 /dev/urandom > random_seed.bin
Then, use this file as the random source:
shuf --random-source=random_seed.bin -n 5 -i 1-10
Note that the “randomness” is then only as good as the seed provided.
Tips & Best Practices for Using ‘shuf’

- Use
-n
for Sampling: When you only need a subset of the input data, the-n
option is your friend. It’s more efficient than shuffling the entire dataset and then taking the first few lines. - Redirect Output for Persistence: Remember to redirect the output of
shuf
to a file if you need to save the shuffled data for later use. - Combine with Other Commands:
shuf
is particularly powerful when combined with other command-line tools likeseq
,awk
, andgrep
. This allows you to create complex data processing pipelines. - Consider Performance: For very large files, shuffling in memory can be slow. Consider using alternative approaches or splitting the file into smaller chunks for parallel processing if performance is critical.
Troubleshooting & Common Issues
- ‘shuf: standard input: Invalid argument’: This error often occurs when
shuf
is expecting input from a file but receives none. Ensure that you are providing input either through a file or via standard input. - ‘shuf: range out of order’: This error happens when the range specified with
-i
is invalid (e.g.,shuf -i 10-1
). Make sure the start of the range is less than or equal to the end. - Unexpected Results with Large Files: If you are working with extremely large files, the performance of
shuf
might be limited by available memory. Consider using disk-based shuffling techniques for such scenarios.
FAQ: Frequently Asked Questions about ‘shuf’
- Q: Is
shuf
truly random? - A:
shuf
relies on the system’s pseudo-random number generator (PRNG). While not cryptographically secure, it’s generally sufficient for most everyday tasks. - Q: Can
shuf
handle binary data? - A:
shuf
is designed to work with text-based data, where each line is treated as a separate unit. It might not be suitable for shuffling arbitrary binary files. - Q: How can I shuffle lines containing special characters?
- A:
shuf
should handle lines containing special characters correctly as long as they are part of a valid text file. If you encounter issues, ensure that the file encoding is consistent (e.g., UTF-8). - Q: How does shuf handle very large files that don’t fit in memory?
- A: `shuf` is generally designed to load the entire input into memory. For very large files that exceed available memory, it may become slow or fail. For these scenarios, consider splitting the file into smaller manageable chunks or using more specialized tools designed for out-of-core processing.
- Q: Can I use shuf in a script to generate a unique random file name?
- A: Yes! Combining `shuf` with other commands like `date` can generate unique names. Example: `filename=”file_$(date +%s)_$(shuf -i 1000-9999 -n 1).txt”`. This generates a filename including the current Unix timestamp and a random number.
Conclusion: Embrace the Randomness
The shuf
command is a versatile and efficient tool for generating random permutations and samples from your data. Its simplicity and ease of use make it an invaluable addition to any command-line toolkit. Whether you’re a developer, system administrator, or data scientist, shuf
can help you streamline your workflow and add an element of randomness to your tasks. So, the next time you need to shuffle a list, generate a random sample, or simply add a bit of chaos to your data, give shuf
a try. Visit the GNU Core Utilities documentation for more details and advanced usage examples. Happy shuffling!