reads in one or more line-oriented files and considers each file as a set of
strings. Blank lines do not represent the empty string, but instead are
ignored. The first command line argument shown as firstfile above
represents the starting set of lines. The arguments are then interpretted
according to Forward Polish Notation (FPN), as described by Jan Lukasiewicz.
Jan invented the first widely accepted non-classical logic as well as this
excellent notation. FPN requires no parentheses to describe arbitrarily
complex combinations of any number of binary operations.
Each successive command line argument
after the first represents an operation that starts with the accumulator
set A, applies the set operation A op B, and then stores the result in
the accumulator A. Another set operation may then be performed until all
listed arguments are used up. The result is then printed in lexicographical
order to standard output. Four operations are supported: Set union is
the plus symbol (+). Set intersection is the and symbol ( & ) which must be
escaped in most shells. Set difference is the subtraction symbol (-). And
set exclusive or is represented by the percent sign (%). There is also an
optional shuffling symbol toggle, (@), that means to randomly shuffle
all output lines instead of sorting in lexicographical order.
Thus, a simple way to randomize lines in a file is
blm firstfile @
If a filename of "-" is listed, it represents the standard input to blm.
If none of the four option characters appears at the beginning of a filename
argument, set addition (+) is assumed.