ROT
NAME
rotate - rotate a file
SYNOPSIS
rotate [-rbloB] [-c c] [file]
DESCRIPTION
rotate
rotates a file, so that lines become columns and vice versa. Without any
options, the file will be rotated clockwise. So, from the input
abcde
abcd
abc
ab
a
xx xx
A
AB
ABC
ABCD
ABCDE
you will get
AAAAA aaaaa
BBBB bbbb
CCC ccc
DD x dd
E x e
x
x
rotate
uses a two pass algorithm, where the first part collects the line length of each
line in the input, and the second prints out the new lines, seeking through
the input file.
When no file or - is given,
rotate
reads from standard input.
OPTIONS
- -r
-
rotate reverse (counter-clockwise)
- -b
-
normally,
rotate
suppresses printing of trailing blanks in output lines.
This option retains them, so all blanks of the input will appear
in the output
- -l
-
do only the first pass and print the number of lines and the length of the
longest line found to standard output
- -o
-
change order of columns; in combination with the rotation this yields
one more file operation (see below)
- -B
-
this is for big files; the data will be hold in temporary files rather
than in memory; this slows down
rotate
enormously
- -c c
-
use
c
as "line"-separator, instead of the newline character
REMARKS
One may ask, what
rot
is useful for.
Think about the functionality of programs like
cat(1),
or the line oriented
grep(1),
cut(1),
sed(1),
sort(1),
and others, when applied to a rotated file.
In conjunction with
rotate
they do not longer work on lines, but columns.
For example
rotate f | grep ... | rotate -r
is a
grep
on columns of the file f.
The -o option permits you to manipulate a file in some way of "reflecting" it
in a "diagonal" line. The following table shows the different effects of
rotate
called with various options. Data manipulation is shown by means of the
output of a file with the contents
AB
CD
and a symbolic notation. R means Rotation (angle given), M means
reflection at given mirror axis.
Combinations of two calls of
rotate
are also given. (Other combinations
have identical effects to one of the mentioned.)
call | output | function
|
|
rotate | CA | R
|
DB | -90 deg |
|
rotate -r | BD | R
|
AC | 90 deg |
|
rotate -o | DB | M
|
CA | / |
|
rotate -ro | AC | M
|
BD | \ |
|
rotate | rotate | DC | R
|
BA | 180 deg |
|
rotate | rotate -r | AB | (Id) *
|
CD |
|
rotate | rotate -o | BA | M **
|
DC | | |
|
rot | rot -ro | CD | M
|
AB | - |
|
* Note, that rotate|rotate -r (or rotate|rotate|rotate|rotate) is not exactly the null
operator.
rotate
must insert blanks to keep track of the columns.
They may appear at the end of lines in a further run of
rotate,
if the -b option is given.
Without this option blanks from the original input may be lost.
** This is not the same as what is done by
rev(1).
Rev does not retain columns!
rotate
knows nothing about tab characters, use
expand(1)
to handle them correctly.
FILES
- /tmp/rot* -
-
temporarily copied input, if standard input is incapable of seeking
(pipe or terminal) (-B option only)
- /tmp/rod* -
-
tempfile for holding length of input lines (-B option only)
SEE ALSO
rev(1), tail(1bsd), tac(1public), expand(1), colrm(1)
AUTHOR
Martin Schmidt
Dortmund - W. Germany
mschmidt@exunido.uucp
cLIeNUX note; Schmidt calls this program "rot".