|
|
1.1 ! root 1: .TH RS 1 "14 June 1983" ! 2: .UC 4 ! 3: .SH NAME ! 4: rs \- reshape a data array ! 5: .SH SYNOPSIS ! 6: \fBrs [ \-[csCS][\fRx\fB][kKgGw][\fRN\fB]tTeEnyjhHm ] [ \fRrows\fB [ \fRcols\fB ] ]\fR ! 7: .SH DESCRIPTION ! 8: .I Rs ! 9: reads the standard input, interpreting each line as a row ! 10: of blank-separated entries in an array, ! 11: transforms the array according to the options, ! 12: and writes it on the standard output. ! 13: With no arguments it transforms stream input into a columnar ! 14: format convenient for terminal viewing. ! 15: .PP ! 16: The shape of the input array is deduced from the number of lines ! 17: and the number of columns on the first line. ! 18: If that shape were inconvenient, a more useful one might be ! 19: obtained by skipping some of the input with the \fB\-k\fP option. ! 20: Other options control interpretation of the input columns. ! 21: .PP ! 22: The shape of the output array is influenced by the ! 23: .I rows ! 24: and ! 25: .I cols ! 26: specifications, which should be positive integers. ! 27: If only one of them is a positive integer, ! 28: .I rs ! 29: computes a value for the other which will accommodate ! 30: all of the data. ! 31: When necessary, missing data are supplied in a manner ! 32: specified by the options and surplus data are deleted. ! 33: There are options to control presentation of the output columns, ! 34: including transposition of the rows and columns. ! 35: .PP ! 36: The options are described below. ! 37: .IP \fB\-c\fRx ! 38: Input columns are delimited by the single character \fIx\fP. ! 39: A missing \fIx\fP is taken to be `^I'. ! 40: .IP \fB\-s\fRx ! 41: Like \fB\-c\fR, but maximal strings of \fIx\fP are delimiters. ! 42: .IP \fB\-C\fRx ! 43: Output columns are delimited by the single character \fIx\fP. ! 44: A missing \fIx\fP is taken to be `^I'. ! 45: .IP \fB\-S\fRx ! 46: Like \fB\-C\fR, but padded strings of \fIx\fP are delimiters. ! 47: .IP \fB\-t\fR ! 48: Fill in the rows of the output array using the columns of the ! 49: input array, that is, transpose the input while honoring any ! 50: .I rows ! 51: and ! 52: .I cols ! 53: specifications. ! 54: .IP \fB\-T\fR ! 55: Print the pure transpose of the input, ignoring any ! 56: .I rows ! 57: or ! 58: .I cols ! 59: specification. ! 60: .IP \fB\-k\fRN ! 61: Ignore the first \fIN\fR lines of input. ! 62: .IP \fB\-K\fRN ! 63: Like \fB\-k\fR, but print the ignored lines. ! 64: .IP \fB\-g\fRN ! 65: The gutter width (inter-column space), normally 2, is taken to be \fIN\fR. ! 66: .IP \fB\-G\fRN ! 67: The gutter width has \fIN\fR percent of the maximum ! 68: column width added to it. ! 69: .IP \fB\-e\fR ! 70: Consider each line of input as an array entry. ! 71: .IP \fB\-n\fR ! 72: On lines having fewer entries than the first line, ! 73: use null entries to pad out the line. ! 74: Normally, missing entries are taken from the next line of input. ! 75: .IP \fB\-y\fR ! 76: If there are too few entries to make up the output dimensions, ! 77: pad the output by recycling the input from the beginning. ! 78: Normally, the output is padded with blanks. ! 79: .IP \fB\-h\fR ! 80: Print the shape of the input array and do nothing else. ! 81: The shape is just the number of lines and the number of ! 82: entries on the first line. ! 83: .IP \fB\-H\fR ! 84: Like \fB\-h\fR, but also print the length of each line. ! 85: .IP \fB\-j\fR ! 86: Right adjust entries within columns. ! 87: .IP \fB\-w\fRN ! 88: The width of the display, normally 80, is taken to be the positive ! 89: integer \fIN\fP. ! 90: .IP \fB\-m\fR ! 91: Do not trim excess delimiters from the ends of the output array. ! 92: .PP ! 93: With no arguments, ! 94: .I rs ! 95: transposes its input, and assumes one array entry per input line ! 96: unless the first non-ignored line is longer than the display width. ! 97: Option letters which take numerical arguments interpret a missing ! 98: number as zero unless otherwise indicated. ! 99: .SH EXAMPLES ! 100: .de IC ! 101: .IP ! 102: .ss 36 ! 103: .ft B ! 104: .. ! 105: .de NC ! 106: .br ! 107: .ss 12 ! 108: .PP ! 109: .. ! 110: .I Rs ! 111: can be used as a filter to convert the stream output ! 112: of certain programs (e.g., ! 113: .IR spell , ! 114: .IR du , ! 115: .IR file , ! 116: .IR look , ! 117: .IR nm , ! 118: .IR who , ! 119: and ! 120: .IR wc (1)) ! 121: into a convenient ``window'' format, as in ! 122: .IC ! 123: who | rs ! 124: .NC ! 125: This function has been incorporated into the ! 126: .IR ls (1) ! 127: program, though for most programs with similar output ! 128: .I rs ! 129: suffices. ! 130: .PP ! 131: To convert stream input into vector output and back again, use ! 132: .IC ! 133: rs 1 0 | rs 0 1 ! 134: .NC ! 135: A 10 by 10 array of random numbers from 1 to 100 and ! 136: its transpose can be generated with ! 137: .IC ! 138: jot \-r 100 | rs 10 10 | tee array | rs \-T > tarray ! 139: .NC ! 140: In the editor ! 141: .IR vi (1), ! 142: a file consisting of a multi-line vector with 9 elements per line ! 143: can undergo insertions and deletions, ! 144: and then be neatly reshaped into 9 columns with ! 145: .IC ! 146: :1,$!rs 0 9 ! 147: .NC ! 148: Finally, to sort a database by the first line of each 4-line field, try ! 149: .IC ! 150: rs \-eC 0 4 | sort | rs \-c 0 1 ! 151: .NC ! 152: .SH SEE ALSO ! 153: jot(1), vi(1), sort(1), pr(1) ! 154: .SH AUTHOR ! 155: John Kunze ! 156: .SH BUGS ! 157: Handles only two dimensional arrays. ! 158: ! 159: The algorithm currently reads the whole file into memory, ! 160: so files that do not fit in memory will not be reshaped. ! 161: ! 162: Fields cannot be defined yet on character positions. ! 163: ! 164: Re-ordering of columns is not yet possible. ! 165: ! 166: There are too many options.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.