Randomize lines in a file
Last night I was trying to randomize the lines of a given file , for a task I needed to do, but I thought the best way to do that in a simple way was using text-utils from *nix OS. I use Debian at work and Ubuntu at home, so all you have to do is install via aptitutde the following package and the rest is a peace of cake ;-D.
The name of the package is : randomize-lines ; description: randomize lines of input text
Once you have installed the package , the command name is rl , here is a simple example to use.
EXAMPLES
Some simple demonstrations of how rl can help you do everyday tasks. Warning: some of these examples may affect the
operation of your system.
Play a random sound after 4 minutes (perfect for toast):
sleep 240 ; play âfind /sounds -name â*.auâ -print | rl --count=1â
Re-nice all the processes of a random logged-in user:
renice +5 -u âwho | cut â-d â -f 1 | sort -u | rl --count=1â
Kill a random process on your computer.
kill -9 âps -A | awk â{print $1}â | rl --count=1â
Do this as root and see how long your system keeps working. Increase the --count for extra effect. (you may need
to change the ps and awk parameters depending on your system)
Find all movies and play them in random order.
find . -name â*.aviâ -print0 | rl -0 | xargs -n 1 -0 mplayer
Because -0 is used filenames with spaces (even newlines and other unusual characters) in them work.
Here are the options you can use for the command rl
rl reads lines from a input file or stdin, randomizes the lines and outputs a specified number of lines. It does this with only a single pass over the input
while trying to use as little memory as possible.
-c, –count=N
Select the number of lines to be returned in the output. If this argument is omitted all the lines in the file will be returned in random order. If the
input contains less lines than specified and the –reselect option below is not specified a warning is printed and all lines are returned in random order.
-r, –reselect
When using this option a single line may be selected multiple times. The default behaviour is that any input line will only be selected once. This option
makes it possible to specify a –count option with more lines than the file actually holds.
-o, –output=FILE
Send randomized lines to FILE instead of stdout.
-d, –delimiter=DELIM
Use specified character as a “line” delimiter instead of the newline character.
-0, –null
Input lines are terminated by a null character. This option is useful to process the output of the GNU find -print0 option.
-n, –line-number
Output lines are numbered with the line number from the input file.
-q, –quiet, –silent
Be quiet about any errors or warnings.
-h, –help
Show short summary of options.
-v, –version
Show version of program.