ヘッダーを保持しながら大きなデータファイルをスクロールする方法


19

大きなデータファイルがあり、画面が垂直方向と水平方向の両方でオーバーフローするとします。ヘッダー行が画面に表示されたまま、このファイルを参照するにはどうすればよいですか?

今のところ、less -Sファイルを水平および垂直にうまくスクロールできるように、を使用しています。ただし、下にスクロールすると、ヘッダー行は明らかに消えます。これらをより少なく使用する方法はありますか?

別の方法はvim、分割画面モードでを使用すること:set nowrapです。ただし、水平方向にスクロールすると、上部ウィンドウは同じようにスクロールしません(:windo set scrollbind私が知る限り、垂直方向のスクロールでのみ機能します)。


データがスクロールしている間、ヘッダーが表示されたままになるとはどういう意味ですか?列名の最初の行だけが同じようにしたいということですか?データを含むファイルは1つだけで、このデータは変化し続けるので、変更された行のみを表示したいですか 最初のN行のみ、または最後のN行のみを表示しますか?
ポリム14

2
@polym:lessまたはtail -f、画面に表示される最初の行が常にヘッダー行になることを除いて、通常どおり正確に動作します。ヘッダーは固定されているが、本文はスクロールするWebサイト(またはExcel)と同様。
マット14

@polym ^彼が言ったことは何でも!
デバンジャンバス14

@polym、スプレッドシートの水平ビューと垂直ビューをフリーズする方法を考えてください。スクロール中は、固定された列がそのまま残ります。
user208145

回答:


11

vimに精通している場合は、これがおそらく最適なオプションです。を変更することにより、horizo​​ntal-scroll-bind-onlyを有効にできます'scrollopt'

set scrollopt=hor

したがってvim -u NONE、を使用すると、次のように目的の動作が得られます

:set scrollopt=hor
:set nowrap
:1split
:windo set scrollbind

スキップする列の数とエッジスキップからの開始距離をそれぞれ調整'sidescroll'および'sidescrolloff'変更することができます。


1
これをより少ない方法で行う方法はありますか?特に、巨大なデータファイルをスクロールするとき(メモリにロードするには大きすぎますか?)
NM

@NM:他の回答を参照してください
トール

私はこれを試しましたが、下のウィンドウを下にスクロールすると、上のウィンドウも下にスクロールします
ダニエルセロディオ

@DanielSerodio:何かが変わったようです。scrolloptをhorに設定すると機能します。更新された回答を参照してください
トール

更新された回答は期待どおりに機能します。
非常に

17

スクロール領域の設定をサポートする端末では:

tailf() ( # args: <file> [<number-of-header-lines>]
  trap 'tput csr 0 "$((LINES-1))"' INT
  tput csr "$((1+${2-1}))" "$((LINES-1))"
  tput clear
  {
    head -n"${2-1}"
    printf "%${COLUMNS}s\n" "" | tr ' ' =
    tail -n "$((LINES-1-${2-1}))" -f
  } < "$1"
)

zshまたはのようなシェルが端末のサイズに基づいbash$COLUMNSand $LINES変数を設定すると仮定します)。


1
おい!それは敬godです!申し訳ありませんが、自分でコントロールできませんでした。次の機能を実装するために、ウェブページまたはコマンドまたは変数に指示していただけますか?
デバンジャンバス14

1.で終了q 2. upおよびdownキーで下にスクロール
Debanjan Basu 14

それは上で便乗することが可能であるless使用せずに、自分自身headtail画面を毎回再描画するために?解決策はまだ3未満です。あなたはそれを編集しているようで、満足して欲しくありませんので、私はまだそれを正しいとマークしていません。自己満足は創造性を殺すものだと言われています!:)
デバンジャンバス14

@DebanjanBasu less -Xtail -n ...上記の代わりに使用できますが、「up」キーはヘッダーを削除します。
ステファンシャゼル14

私が言ったように、あなたがより良いアイデアを持っているなら、私にそれを指してください、またはそれでもあなたの答えをさらに微調整してください。あなた私が最初に尋ねた質問に答えたので、私はそれを正しくマークしなければなりませでした。アイデアはless、ヘッダーとフッターの間に環境を挟み込み、より一般的なツールにすることです。
デバンジャンバス14

6

これを試してください(インストールする必要がありますmultitail):

multitail -du -t "$(head -n 1 filename)" filename

または、1行より長いヘッダーの場合:

multitail -wh 2 -l "head -n 2 filename" filename

ファイルの代わりにコマンド出力を追跡する場合:

multitail -wh 2 -l "command | head -n 2" -l command

または必要-tに応じて使用します。unbufferコマンド出力がすぐに表示されるように使用する必要がある場合があることに注意してください。

フォームの-Dステータス行の表示を無効にするために使用できます-wh(フォームの目的を無効にします-t)。


2

Thorの答えは、両方のウィンドウを垂直にスクロールさせる垂直「scrollopt」を無効にすることについて言及していませんでした。だから私にとって完全な解決策はこれをvimに貼り付けることです:

:set scrollopt+=hor
:set scrollopt-=ver
:set nowrap
:1split
:windo set scrollbind

好みに応じscrollopt:scrollopt=horまたは:scrollopt=hor,jumpで直接設定できます。これがのVimDocですscrollopt
マイケル

1

これは私が得た限りtmuxです:

#!/bin/bash

tmux new-session -s main -n 'w1' -d
tmux send-keys -t main:w1.0 "tail -f <(head -n1 $1)" C-j
tmux split-window -v
tmux resize-pane -t 0 -y 2
tmux send-keys -t 1 "tail -n+2 $1|less -S" C-j
tmux attach -t main

これは、ウィンドウ分割に関するuser80519の答えの拡張ですtmux。名前を付けて保存しhless.sh、実行可能にし、次のように使用します

hless.sh file
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.