長いコンソール行をお互いに下にページとして印刷したいと思います。
例えば
AAAAAAABBBBBBBXX
CCCCC
DDDDDDDEE
FFFFFFFGGGGG
IIII
次のようになります。
AAAAAAA
CCCCC
DDDDDDD
---
BBBBBBB
EE
---
XX
===
FFFFFFF
IIII
---
GGGGG
===
改行の代わりに。デフォルトでは、固定数の行(「ブロック」)の行幅が特定の列を超えると、新しい「ページ」が作成され、コンソールに表示される必要があります。下部に多くの「ページ」行が表示されないようにするには、行ブロックで実行する必要があります。行が非常に長い場合(この場合は「XX」)、複数の「拡張ページ」が必要になる場合があります。最後に、空の行を入力に追加して完全なデータブロックを得ることができます。 「---」はページ区切り記号、「==」はブロック区切り記号です。
基本的なアイデアは、表形式の照合順序などを表示することです。これを行う簡単な方法はありますか?
答え1
これはまさにあなたが要求したものではありませんが、私がしたことです。
オプションを使用して出力をless
パイプします-S
(長い行を切り捨てます)。
my_command_that_outputs_tables | less -S
その後、less
ビューア内で左/右カーソルキーを押すと、データは一度に1ページずつ左右にスクロールします。q
終了するにはクリックするか、?
ヘルプを求めてください。
目的のタスクを実行する方法は次のとおりです。
my_command_that_outputs_tables | expand | tee >(cut -c1-79) >(sleep 1; cut -c80-159) | {sleep 2; cut -c160-}
この例は、8マスのタブストップを持つ最大3つの80列の画面で機能します。
expand
タブを空白に変換します。これらのタブデータがないと、データは端末に収まりません。tee
この例では、データは3つの同じストリームにコピーされます。 2つは「ファイル」で、1つは標準出力にコピーされます。必要に応じて「ファイル」出力を追加できます。>(...)
bash 構文は出力ファイルをパイプとして扱います。sleep 1
sleep 2
ページを正しい順序で表示するのに遅延が発生します。これは少しハッキングです。おそらくより良い方法があります。cut -cM-N
入力から垂直スライスを取得します。は1から計算される最初の列でも最後の列でもM
あります。省略N
すると、N
すべての文字が行末に移動されます。
したがって、データをインポートして3つのストリームにコピーし、各ストリームを垂直に分割します。