長いコンソール行をページビューで表示する方法は?

長いコンソール行をページビューで表示する方法は?

長いコンソール行をお互いに下にページとして印刷したいと思います。

例えば

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 1sleep 2ページを正しい順序で表示するのに遅延が発生します。これは少しハッキングです。おそらくより良い方法があります。
  • cut -cM-N入力から垂直スライスを取得します。は1から計算される最初の列でも最後の列でもMあります。省略Nすると、Nすべての文字が行末に移動されます。

したがって、データをインポートして3つのストリームにコピーし、各ストリームを垂直に分割します。

関連情報