Need Random Data? Unleash the Power of ‘shuf’!
In the world of data manipulation and scripting, the need for randomness often arises. Whether you’re generating test data, selecting random samples, or shuffling lists, a reliable tool is indispensable. Enter shuf
, a command-line utility that provides a simple yet powerful way to generate random permutations of input data. This article will guide you through the installation, usage, and best practices of shuf
, helping you unlock its potential for your projects.
Overview: The Elegance of Randomization with shuf

shuf
, part of the GNU Core Utilities, is designed to generate random permutations of its input. What makes it ingenious is its simplicity and efficiency. It treats each line of input as an item and shuffles these items randomly. It can also generate a sequence of numbers and shuffle them. Unlike more complex scripting solutions, shuf
is a standalone utility that does one thing and does it well: providing random orderings. This makes it ideal for scripting, data analysis, and any task requiring an element of chance.
Installation: Getting shuf on Your System

Since shuf
is part of the GNU Core Utilities, it’s likely already installed on most Linux and Unix-like systems. You can check if it’s installed by running:
shuf --version
If it’s not installed, or if you need a more recent version, you can typically install it through your system’s package manager. Here are some common methods:
- Debian/Ubuntu:
sudo apt-get update sudo apt-get install coreutils
- Fedora/CentOS/RHEL:
sudo dnf install coreutils
- macOS (using Homebrew):
brew install coreutils
(Note: On macOS, the
shuf
command will be prefixed withg
, so usegshuf
instead.)
After installation, verify the installation with the version command shown above.
Usage: Mastering the Art of Random Shuffling

shuf
offers a range of options to customize its behavior. Let’s explore some common use cases with practical examples.
1. Shuffling Lines from a File
The most basic usage is shuffling lines from a file. Create a file named names.txt
with the following content:
Alice
Bob
Charlie
David
Eve
To shuffle the lines in this file, run:
shuf names.txt
The output will be a random permutation of the names. For example:
David
Alice
Eve
Bob
Charlie
The order will be different each time you run the command.
2. Selecting a Random Sample
You can use shuf
to select a random sample of a specific size from a file. The -n
option specifies the number of lines to output.
shuf -n 3 names.txt
This will output 3 randomly selected names from the names.txt
file. Example output:
Charlie
Eve
Alice
3. Generating a Random Number Sequence
shuf
can also generate a sequence of numbers and shuffle them. Use the -i
option to specify the range of numbers.
shuf -i 1-10
This will output a random permutation of the numbers from 1 to 10. Example output:
5
2
8
1
10
3
6
9
4
7
4. Generating a Random Number within a Range
If you need just one random number from a range, combine -i
with -n 1
:
shuf -i 1-100 -n 1
This will output a single random number between 1 and 100.
5. Shuffling Input Directly from the Command Line
You can pipe input to shuf
from other commands or use echo and pipes.
echo -e "apple\nbanana\ncherry" | shuf
This will shuffle the words “apple”, “banana”, and “cherry”. Example output:
banana
apple
cherry
6. Repeating the Shuffle
The -r
option allows you to repeat values, with replacement.
shuf -n 5 -r names.txt
This will output 5 random names from names.txt
, but names can be repeated.
7. Controlling the Random Seed
For reproducible results, you can set the random seed using the --random-source
option. This is useful for testing and debugging.
First create a file named ‘random_seed’ containing a single integer representing your random seed.
echo 12345 > random_seed
Then use the command below to utilise the random seed
shuf --random-source=random_seed -i 1-5
This will give the same shuffled sequence every time, provided the `random_seed` file contains the same number.
Tips & Best Practices: Maximizing shuf’s Potential

- Understand the Input:
shuf
treats each line as a separate item. Be mindful of how your data is formatted. - Use
-n
for Sampling: When you only need a subset of the data, the-n
option provides a concise way to select a random sample. - Combine with Other Tools:
shuf
shines when combined with other command-line utilities likegrep
,awk
, andsed
. - Consider Performance: For very large files, consider the memory implications. Piping the file content may be more efficient in some cases.
- Use with caution for Security Sensitive Tasks:
shuf
is not designed for generating cryptographically secure random numbers. For those tasks, use tools like/dev/urandom
.
Troubleshooting & Common Issues
shuf: standard input: Cannot allocate memory
: This error occurs whenshuf
tries to load a very large file into memory. Try piping the file content or processing it in smaller chunks.- Incorrect Output: Ensure that your input data is properly formatted. Unexpected characters or line endings can affect the shuffling.
- macOS
gshuf
: Remember to usegshuf
instead ofshuf
on macOS if you installed it via Homebrew. - Unexpected Duplicates with -n: If you don’t specify the -r flag (repeat), the program will error if n is larger than the number of input lines, and if n is smaller duplicates will never be created.
FAQ: Your Questions About shuf Answered
- Q: Can
shuf
handle binary data? - A:
shuf
is designed for text-based data, processing each *line*. While it *might* work with certain binary formats that use clear line separators, it’s not designed for arbitrary binary data and could lead to unexpected results. - Q: How can I shuffle a CSV file while keeping the header row in place?
- A: Use the following command:
head -n 1 input.csv; tail -n +2 input.csv | shuf
. This prints the header first, then shuffles the remaining rows. - Q: Is
shuf
suitable for generating random passwords? - A: While you *could* use
shuf
with a character set, it’s not cryptographically secure. Dedicated password generation tools are recommended for security-sensitive applications. - Q: Can I use
shuf
within a shell script? - A: Absolutely!
shuf
is designed to be used within shell scripts. Its simple interface makes it easy to integrate into larger workflows. - Q: Does `shuf` guarantee a perfectly uniform distribution?
- A: `shuf` uses a pseudo-random number generator (PRNG). While PRNGs are designed to produce statistically random sequences, they are deterministic. Therefore, for most practical purposes, `shuf` provides sufficiently random output. However, for highly sensitive applications requiring absolute randomness, a true random number generator (TRNG) may be necessary.
Conclusion: Embrace Randomness with shuf
shuf
is a valuable addition to any command-line toolkit. Its simplicity, efficiency, and versatility make it an indispensable tool for generating random permutations, selecting random samples, and introducing randomness into your scripts and workflows. Take some time to experiment with shuf
and discover how it can streamline your data manipulation tasks. Now, go ahead and give shuf
a try! For more information, you can visit the official GNU Core Utilities page.