unsort(1) reorder lines in a file in semirandom ways


[-hvrpncmMsz0l ] [--help ] [--version ] [--random ] [--heuristic ] [--identity ] [--filenames [=profile] ] [--separator sep ] [--concatenate ] [--merge ] [--merge-random ] [--seed integer ] [--zero-terminated ] [--null ] [--linefeed ] [file ... ]


prints the lines in the input files (or standard input) in semi-random order. Available algorithms are a Mersenne Twister based PRNG and a heuristic algorithm that aims to create a subjective even distribution.

Command line options

-h, --help
Display a concise summary of the available options and argument syntax.
-v, --version
Display version and copyright information.
-r, --random
Use the Mersenne Twister based randomization algorithm.
-p, --heuristic
Use the heuristic Do shuffling Dc algorithm which permutes the lines in such a way that they're spread more or less evenly in the output. This is the default.
-n, --identity
Do not reorder lines in the input. Useful if you just want to merge the files.
-f, --filenames [=profile]
Assumes the input has a structure similar to filenames and apply randomization seperately to each directory level.

An example would be a list of mp3 files where the top level is the genre, the second level is the name of the artist and the third level is the name of the album. The --filenames option allows you to randomize the list with different randomization strategies for each of the artist, album and track levels.

Two types of randomization are supported: simple and proportional. Simple randomization picks one entry from each directory at that level in a round-robin fashion. If one directory contains fewer entries than the others, it will run out and stop appearing at some point before the end of the output.

Proportional randomization will spread the directory entries evenly over the output.

The profile argument can be used to specify which randomization types to use. It is a concatenation of the randomization types to use for each level. Use 1 for simple randomization and n for proportional randomization. If the input has more levels than specified, the last character determines the randomization type for all subsequent levels.

For example, --filenames = n1n means: use proportional randomization for the genre, use simple randomization for the artists and use proportional randomization again for the album names and all levels below that.

-S, --separator sep
The directory separator to use with -f Defaults to So / Sc .
-r, --concatenate
Concatenate all input files then apply the shuffling algorithm to the result as a whole.
-m, --merge
Shuffle all input files seperately then merge the result. Equal-sized files will be merged in the order in which they appear on the command line.
-M, --merge-random
Shuffle all input files seperately then merge the result. Equal-sized files will be merged in random order. This is the default.
-s, --seed integer
Use this integer as a seed, instead of random data from the environment.
-z, --zero-terminated, -0, --null
Lines are terminated with a \0 character.
-l, --linefeed
Lines are terminated with a \n character. This is the default.