Need Random Data? Unleash the Power of “shuf”!
Have you ever needed to shuffle lines in a file, generate a random sample from a list, or create randomized test data? The shuf
command, a seemingly simple yet incredibly versatile utility, is your answer. Part of the GNU Core Utilities, shuf
excels at creating random permutations of its input, making it an indispensable tool for tasks ranging from data analysis to game development. Let’s dive into how shuf
can simplify your workflow and add a touch of randomness to your everyday tasks.
Overview

shuf
is a command-line utility designed for generating random permutations of input. It reads lines from a file (or standard input), shuffles them, and writes the shuffled result to standard output. What makes shuf
particularly clever is its ability to handle large datasets efficiently. Unlike some naïve shuffling algorithms, shuf
avoids loading the entire input into memory. Instead, it employs algorithms that allow it to shuffle data streams of virtually any size. This makes it ideal for working with log files, database dumps, or any other large text-based data source.
The real power of shuf
lies in its simplicity and flexibility. It integrates seamlessly into shell scripts and pipelines, enabling you to add randomness to complex workflows with minimal effort. Whether you’re drawing random winners from a list of participants, selecting a random subset of data for testing, or simply adding an element of surprise to your command-line interactions, shuf
is the tool for the job.
Installation

Since shuf
is part of the GNU Core Utilities, it’s pre-installed on most Linux distributions. You can verify its presence by simply typing shuf --version
in your terminal. If it’s not installed, or if you need a specific version, you can typically install it using your distribution’s package manager.
Here are examples for some popular distributions:
- Debian/Ubuntu:
sudo apt update && sudo apt install coreutils
- Fedora/CentOS/RHEL:
sudo dnf install coreutils
- macOS (using Homebrew):
brew install coreutils
Note: On macOS, the
shuf
command installed by Homebrew will be prefixed withg
to avoid conflicts with system utilities. Therefore, you’ll usegshuf
instead ofshuf
.
After installation, confirm the installation by running:
shuf --version
This should output the version information for shuf
.
Usage

The basic syntax of the shuf
command is:
shuf [OPTION]... [FILE]
If no file is specified, shuf
reads from standard input. Let’s explore some common use cases with practical examples.
1. Shuffling Lines in a File
The most basic usage is to shuffle the lines in a file and print the result to standard output.
shuf myfile.txt
This command shuffles the lines in myfile.txt
and displays the shuffled content in the terminal. The original file remains unchanged.
2. Shuffling Standard Input
You can pipe the output of another command into shuf
to shuffle the results. For example, to shuffle a list of files:
ls -l | shuf
This shuffles the output of the ls -l
command, randomizing the order of files listed.
3. Selecting a Random Sample
The -n
option allows you to select a specific number of lines from the input. This is useful for creating random samples.
shuf -n 5 myfile.txt
This command selects 5 random lines from myfile.txt
and prints them to the console. If the file contains fewer than 5 lines, all lines will be printed in random order.
4. Generating a Random Number Sequence
shuf
can also generate random numbers within a specified range using the -i
option.
shuf -i 1-10
This generates a random permutation of the integers from 1 to 10. You can combine this with the -n
option to select a random number from the range:
shuf -i 1-10 -n 1
This selects a single random number between 1 and 10 (inclusive).
5. Creating a Random Password
You can use shuf
to create random passwords by combining it with other utilities like tr
and head
.
cat /dev/urandom | tr -dc A-Za-z0-9\!@#\$%\^\&\*\(\)_\+\`\~\=\{\}\[\]\\\|:;\"\<\>\?\/ | head -c 16 | xclip -selection clipboard
Here’s a breakdown of this command:
cat /dev/urandom
: Generates a stream of random bytes.tr -dc A-Za-z0-9\!@#\$%\^\&\*\(\)_\+\`\~\=\{\}\[\]\\\|:;\"\<\>\?\/
: Filters the random bytes, keeping only alphanumeric characters and special symbols.head -c 16
: Takes the first 16 characters of the filtered output.xclip -selection clipboard
: Copies the generated password to the clipboard. (This requires thexclip
utility to be installed.)
A more elegant and secure approach could be using openssl
for password generation but this example showcases shuf
in a pipeline scenario.
6. Simulating a Coin Flip
A simple use case for shuf
is to simulate a coin flip.
echo -e "Heads\nTails" | shuf -n 1
This command outputs either “Heads” or “Tails” randomly.
7. Shuffling lines in place
By default, shuf
writes to standard output, leaving the original file intact. If you want to shuffle the file “in-place”, you can use a temporary file and mv
command:
shuf input.txt > tmp.txt && mv tmp.txt input.txt
Tips & Best Practices

- Seed for Reproducibility: For testing and debugging purposes, you might want to reproduce the same random sequence. Use the
--random-source=FILE
option to specify a file containing random data, or pipe data intoshuf
, to control the random sequence. Whileshuf
doesn’t directly support a seed argument like some random number generators, you can achieve similar results by piping a consistent stream of random data (e.g., from/dev/urandom
) into it. - Handle Large Files Carefully: While
shuf
is designed to handle large files, processing extremely large files can still take time. Consider using other tools likesort -R
for simpler randomization tasks if performance is critical. - Be Mindful of Character Encoding: Ensure that your input files are encoded consistently (e.g., UTF-8) to avoid unexpected shuffling behavior, especially when dealing with multi-byte characters.
- Combine with Other Utilities:
shuf
shines when combined with other command-line tools. Use pipes, redirection, and other utilities to create powerful and flexible data processing workflows. - Use xargs for arguments: Be careful when using
shuf
with filenames containing spaces. Usingxargs
can prevent unexpected results:
find . -name "*.txt" -print0 | shuf -z | xargs -0 ls -l
Troubleshooting & Common Issues

- Command Not Found: If you get a “command not found” error, make sure
coreutils
is installed correctly (see the Installation section). Also verify that the directory containingshuf
is in yourPATH
environment variable. - Unexpected Output: If the output seems incorrect, double-check the input data and options used. Ensure that the file paths are correct and that the
-n
option is used with a valid number of lines. - Performance Issues: For extremely large files, consider optimizing your workflow or using alternative tools if performance is a concern. Ensure that you have sufficient memory available.
- macOS gshuf vs shuf: Remember that if you installed
shuf
via Homebrew on macOS, you need to usegshuf
.
FAQ

- Q: What’s the difference between
shuf
andsort -R
? - A: Both shuffle, but
shuf
is specifically designed for shuffling lines, handling large files efficiently, and selecting samples.sort -R
(random sort) might be faster for simple randomization tasks, but its behavior and suitability for large files can vary. - Q: Can
shuf
shuffle columns instead of lines? - A: No,
shuf
operates on lines. To shuffle columns, you’d need to use a different tool or script that manipulates the columns directly. - Q: Is
shuf
suitable for generating cryptographically secure random numbers? - A: No,
shuf
is not designed for cryptographic purposes. For secure random number generation, use tools like/dev/urandom
or libraries specifically designed for cryptography. - Q: How do I shuffle multiple files together as if they were one?
- A: You can concatenate the files using
cat
and pipe the result toshuf
:cat file1.txt file2.txt file3.txt | shuf > shuffled_output.txt
- Q: Can I use
shuf
to generate random dates? - A: While
shuf
itself doesn’t generate dates, you can create a file with a list of dates and then useshuf
to randomize them. You can also use other command-line tools likedate
in conjunction withshuf
to generate random date ranges.
Conclusion
shuf
is a powerful and versatile command-line tool for generating random permutations and selections from data. Its simplicity, efficiency, and seamless integration with other utilities make it an invaluable asset for any command-line user. Whether you’re a developer, data scientist, or system administrator, shuf
can simplify your tasks and add a touch of randomness to your workflows.
Now that you’ve learned about the power of shuf
, why not give it a try? Experiment with the examples provided in this article and discover new ways to incorporate randomness into your command-line adventures. For more information and advanced usage scenarios, visit the official GNU Core Utilities documentation.