RS(1)

名称
rs - データ配列の整形

書式
rs [ - [csCS] [x] [kKgGw] [N] tTeEnyjhHmz] [rows [cols]]

解説
rs は標準入力を読み込み、 その各行が、配列を空白で区切った行ベクトルであるとして解釈し、 その配列をオプションに従って変換し、 結果を標準出力に書き出します。 引数を指定しない場合、 rs は、端末で見やすいように、入力をカラム形式 (columnar format) に変換します。

入力配列の形状は、その行数と第 1 行目のカラム数から推測します。 それが不都合なら、 -k オプションによって最初の数行を読み飛ばし、 より好都合な行を用いることもできます。 この他のオプションは、入力カラムの解釈を変更するものです。

出力配列の形状は引数 rows および cols の指定により変化します。これらの引数は正の整数です。 それらの一方だけが正の整数である場合、 rs はデータ全体と整合するもう一方の値を計算します。 必要なら、オプションの説明に述べる方法で不足したデータが追加され、 余剰データが削除されます。 行と列の転置など、出力カラム形式を変更するオプションもあります。

オプションを以下に示します。

-cx 入力カラムの区切りを単一文字 x とします。 x を省略すると `^I' であると見なされます。

-sx -c と似ていますが、 x 中の最長文字列が区切りとされます。

-Cx 出力カラムの区切りを単一文字 x とします。 x を省略すると `^I' であると見なされます。

-Sx -C と似ていますが、文字列 x が区切り文字となります。

-t  入力配列の列データを用いて出力配列の行を埋めます。 つまり、 rows および cols 指定を優先しつつ、入力を転置します。

-T  rows および cols 指定を無視し、入力の純粋な転置結果を出力します。

-kN 入力の最初の N 行を無視します。

-KN -k と似ていますが、無視した各行を表示します。

-gN 溝 (gutter) の幅 (カラム間のスペース) を N とします。 通常は 2 です。

-GN 溝 (gutter) の幅 (カラム間のスペース) として、 最大カラム幅の N パーセント増しの値を用います。

-e  入力の各行を単一の配列エントリとみなします。

-n  第 1 行目より少ないエントリしかない行があれば、 その行にヌルエントリを追加して埋め合わせます。 通常は、エントリの不足分は入力の次の行からエントリをとって埋め合わせます。

-y  出力の寸法を充たすだけのエントリがない場合、 入力を最初から繰り返し用いて出力を埋め合わせます。 通常は、出力は空白で埋め合わされます。

-h  入力配列の形状を表示するだけで、処理は何も行ないません。 形状とは単に、行数と、第 1 行目のエントリ数のことです。

-H  -h と似ていますが、各行の長さも表示します。

-j  カラム内でエントリを右揃えにします。

-wN 画面表示幅を正整数 N の値に設定します。 通常は 80 です。

-m  出力配列の末尾から余分な区切り文字を削除しません。

-z  カラム幅を最も大きなエントリにあわせます。

引数がない場合、 rs は入力を転置し、 無視しない最初の行が画面表示幅を越えていなければ、 入力の各行毎に 1 つの配列エントリがあると仮定します。 数値引数をとるオプションで数値指定が省略されていると、 別途指示がない限り数値は 0 とみなされます。

使用例
rs はいくつかのプログラム (例えば、 spell, du, file, look, nm, who, wc(1)) のストリーム出力を、好都合な「ウィンドウ」形式に変換する フィルタとして利用できます。例えば

    who | rs

これと同様な出力を行なうほとんどのプログラムに対して rs は十分な機能を提供しますが、 ls(1) には既にこの機能が組み込まれています。

ストリーム入力をベクトルに変換して出力し、それをまた元に戻すには、 次のようにします。

    rs 1 0 | rs 0 1

各要素が 1 から 100 までの乱数から成る 10×10 行列とその転置行列を 生成するには、以下のようにします。

    jot -r 100 | rs 10 10 | tee array | rs -T > tarray

vi(1) エディタにおいて、行あたり 9 要素の複数行ベクトルからなるファイルに対して 挿入や削除を行ない、 その後 9 カラム形式に整形するには、次のようにします。

    :1,$!rs 0 9

最後に、 あるデータベースを 4 行ずつのフィールドの最初の行でソートしたいなら、 以下のようにしてみるとよいでしょう。

    rs -eC 0 4 | sort | rs -c 0 1

関連項目
jot(1), pr(1), sort(1), vi(1)

バグ
2 次元配列しか扱えません。 現在のアルゴリズムはファイル全体をメモリに読み込むため、 メモリに入りきらないファイルは整形できません。 文字位置によってフィールドを定義することは、まだできません。 カラムを並べ換えることも、まだ不可能です。 オプションが多すぎます。