Need Random Data? Master Shuf Command Now!
Ever needed to shuffle lines in a file, generate random numbers, or select a random subset of data from the command line? The shuf utility is your answer. This simple yet powerful tool, part of the GNU Core Utilities, allows you to create random permutations of input with ease. Let’s dive into how you can leverage shuf to streamline your workflows.
Overview

The shuf command takes input, which can be from a file or standard input, and outputs a random permutation of those lines to standard output. What makes shuf so ingenious is its simplicity and versatility. Instead of writing complex scripts to achieve randomization, you can use shuf to quickly generate random data for testing, simulations, or any task requiring a non-deterministic output. Imagine selecting a random winner from a list of participants or generating a deck of cards for a simulated card game—shuf simplifies these tasks tremendously.
Installation
shuf is part of the GNU Core Utilities, which comes pre-installed on most Linux distributions and macOS systems. However, if for some reason it’s not available, you can install it using your system’s package manager.
Debian/Ubuntu:
sudo apt update
sudo apt install coreutils
Fedora/CentOS/RHEL:
sudo dnf install coreutils
macOS (using Homebrew):
brew install coreutils
After installing via Homebrew, the command is available as `gshuf` (GNU shuf) to avoid conflicts with possible BSD versions. You may wish to create an alias in your .bashrc or .zshrc files to use `shuf` directly.
alias shuf='gshuf'
Once installed, you can verify its availability by typing shuf --version in your terminal.
Usage
Let’s explore several practical examples of using shuf.
Shuffling Lines in a File
Suppose you have a file named names.txt containing a list of names, one name per line.
cat names.txt
# Output:
# Alice
# Bob
# Charlie
# David
# Eve
To shuffle the lines in this file and output the result to the console, use the following command:
shuf names.txt
# Possible Output:
# David
# Charlie
# Alice
# Eve
# Bob
The order of the names will be different each time you run the command.
Shuffling a Range of Numbers
shuf can also generate a random permutation of a sequence of numbers. The -i option (or --input-range=LO-HI) allows you to specify a range. For example, to shuffle the numbers from 1 to 10:
shuf -i 1-10
# Possible Output:
# 7
# 2
# 9
# 1
# 5
# 8
# 3
# 6
# 10
# 4
Selecting a Random Sample
The -n option (or --head-count=COUNT) limits the output to a specified number of lines. This is useful for selecting a random sample from a larger dataset. For example, to select 3 random names from names.txt:
shuf -n 3 names.txt
# Possible Output:
# Bob
# Eve
# Alice
Generating Random Numbers Within a Specific Range
Combine -i and -n to generate a specific number of random integers within a range. To generate 5 random numbers between 1 and 100:
shuf -i 1-100 -n 5
# Possible Output:
# 67
# 12
# 88
# 3
# 45
Shuffling Input from Standard Input
shuf can also take input from standard input via pipes. For example, to shuffle the output of the ls command:
ls -l | shuf
# Possible Output (a randomized listing of files and directories):
# drwxr-xr-x 2 user group 4096 Jul 20 10:00 Documents
# -rw-r--r-- 1 user group 234 Jul 20 10:00 example.txt
# drwxr-xr-x 3 user group 4096 Jul 20 10:00 Downloads
# ...
Controlling the Random Seed
For reproducibility, you can use the --random-source=FILE option to specify a file containing random data or use the --seed=NUMBER option to initialize the random number generator with a specific seed. This is particularly useful for testing or simulations where you need consistent results.
shuf --seed=123 names.txt
# Output (always the same order when using seed 123):
# Eve
# David
# Alice
# Charlie
# Bob
Tips & Best Practices
- Use with care on large files: Shuffling very large files can be memory-intensive. Consider using alternatives like streaming the file to `sort -R` (which has limitations on randomness).
- Combine with other utilities:
shufworks seamlessly with other command-line tools. Use it withawk,sed, orgrepfor complex data manipulation tasks. - For sensitive applications, consider a cryptographically secure random number generator: While
shuf‘s random number generation is suitable for many applications, it is not designed for cryptographic purposes. - Understand the limitations of randomness: While
shufprovides a good approximation of randomness, truly random number generation is a complex topic. Be aware of potential biases in your data and adjust your usage accordingly.
Troubleshooting & Common Issues
shuf: standard input: Input/output error: This usually indicates an issue with the input source. Ensure the file exists and is readable. If piping from another command, check that the previous command is producing output as expected.- Inconsistent results with
--seed: Ensure you are using the same version ofshufacross different runs if you need perfectly reproducible results. Implementations of random number generators can vary slightly, affecting the output even with the same seed. shuf: memory exhausted: This occurs when shuffling extremely large files. Try breaking the file into smaller chunks or using an alternative method for shuffling that’s less memory-intensive.- `command not found: shuf`: If you are sure it should be installed, double-check your PATH environment variable. Ensure that the directory containing the coreutils binaries is included. Also, remember the `gshuf` alias on macOS if using Homebrew.
FAQ
- Q: Is
shufavailable on all operating systems? - A:
shufis part of the GNU Core Utilities, which is standard on most Linux distributions. It’s also available on macOS via Homebrew (asgshufunless aliased) and can be installed on Windows using tools like Cygwin or WSL. - Q: Can
shufhandle binary files? - A:
shufis primarily designed for text-based data where each line is treated as a separate unit. It might not be suitable for shuffling arbitrary binary files without proper handling of line breaks and encoding. - Q: How can I shuffle lines in place (i.e., modify the original file)?
- A:
shufdoesn’t directly support in-place modification. You can achieve this by redirecting the output to a temporary file and then replacing the original file with the temporary file. For example:shuf names.txt > tmp.txt && mv tmp.txt names.txt. - Q: Can I use `shuf` to generate random passwords?
- A: While you *can* use it as part of a password generation script, `shuf` alone is not a cryptographically secure random number generator. It’s best to use a dedicated password generation tool for that purpose, or combine `shuf` with a stronger random source (like `/dev/urandom`).
- Q: How to install `coreutils` on Termux?
- A: Run this command: `pkg install coreutils`
Conclusion
The shuf command is a versatile and efficient tool for generating random permutations of data from the command line. Whether you’re shuffling lines in a file, creating random number sequences, or selecting random samples, shuf provides a simple and effective solution. Explore its options, experiment with different use cases, and add it to your toolbox for enhanced command-line productivity. Give shuf a try and discover its power!
For more information and advanced usage, visit the official GNU Core Utilities documentation: GNU Core Utilities.