헤더를 유지하면서 큰 데이터 파일을 스크롤하는 방법


19

화면에 세로 및 가로 방향으로 오버플로되는 큰 데이터 파일이 있다고 가정합니다. 헤더 행이 화면에 유지되는 동안 어떻게이 파일을 찾아 볼 수 있습니까?

현재는을 사용하여 less -S파일을 가로 및 세로로 멋지게 스크롤 할 수 있습니다. 그러나 아래로 스크롤하면 헤더 행이 사라집니다. 이것을 덜 사용하는 방법이 있습니까?

다른 방법은 vim로 분할 화면 모드를 사용하는 것 :set nowrap입니다. 그러나 이제 가로로 스크롤하면 상단 창이 같은 방식으로 스크롤되지 않습니다 ( :windo set scrollbind내가 아는 한 세로 스크롤에서만 작동합니다).


데이터가 계속 스크롤되는 동안 헤더가 계속 표시되는 것은 무엇을 의미합니까? 열 이름이있는 첫 번째 줄만 동일하게 유지하기를 원합니까? 데이터가있는 하나의 파일입니까?이 데이터는 계속 변경되므로 변경된 행 만보 고 싶습니까? 처음 N 개 행 또는 마지막 N 개 행만 보시겠습니까?
polym

2
@polym : less또는 tail -f화면에 표시되는 첫 번째 줄이 항상 머리글 줄인 것을 제외하고는 정상적으로 동작합니다. 헤더가 고정되어 있지만 본문이 스크롤되는 웹 사이트 (또는 Excel)와 같습니다.
Mat

@polym ^ 그가 말한대로!
Debanjan Basu

@polym, 스프레드 시트에서 가로 및 세로보기를 고정 할 수있는 방법을 생각해보십시오. 고정 된 열은 스크롤하는 동안 그대로 유지됩니다.
user208145

답변:


11

vim에 익숙하다면 아마도 이것이 최선의 선택 일 것입니다. 다음을 변경하여 수평 스크롤 바인드 전용을 사용할 수 있습니다 'scrollopt'.

set scrollopt=hor

따라서와 함께 vim -u NONE원하는 동작을 얻을 수 있습니다.

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

건너 뛴 열 수와 가장자리 건너 뛰기 시작 간격을 각각 조정 'sidescroll'하고 'sidescrolloff'변경 하려고 할 수 있습니다 .


1
적은 비용으로 이것을 할 수있는 방법이 있습니까? 특히 거대한 데이터 파일을 스크롤 할 때 (메모리에로드하기에는 너무 큼)?
NM

@NM : 다른 답변보기
Thor

나는이 시도하고 나는 아래로 너무 바닥 창 상단 창 스크롤을 아래로 스크롤 할 때
다니엘 Serodio

@DanielSerodio : 뭔가 변한 것 같습니다. scrollopt를로 설정하면 작동합니다 hor. 업데이트 된 답변보기
Thor

예상대로 번개 빠른 응답을 업데이트 대답은 :) 덕분에 작동
다니엘 Serodio에게

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$COLUMNS$LINES


1
친구! 그것은 경건하다! 죄송합니다, 자신을 제어 할 수 없습니다. 다음 기능을 구현하기 위해 웹 페이지 또는 명령 또는 변수로 안내 할 수 있습니까?
Debanjan Basu

1. 종료 q 2. 스크롤로 내려 updown
Debanjan 바수

그것은에 피기 백 할 수있다 less이용하지 않고 그 자체 headtail화면 매번 다시 그려? 나는 여전히 <3 당신의 해결책을 btw. 나는 당신이 그것을 편집하고있는 것처럼 보이기 때문에 아직 정확하게 표시하지 않고 있으며, 당신이 만족 스럽기를 원하지 않습니다. 자만심은 창의력을 죽이는 사람입니다. :)
Debanjan Basu

@DebanjanBasu less -X대신 사용할 수 tail -n ...있지만 "up"키를 누르면 헤더가 삭제됩니다.
Stéphane Chazelas

내가 말했듯이, 더 좋은 아이디어가 있다면 저에게 알려주십시오. 아니면 여전히 더 나은 답변을 조정하십시오. 나는 당신이 있기 때문에 올바른 표시했다 내가 처음에 부탁하는 질문에 대답했다. 아이디어는 less더 일반적인 도구로 만들기 위해 머리글과 바닥 글 사이에 환경을 배치하는 것입니다.
Debanjan Basu

6

이것을 시도하십시오 (설치해야합니다 multitail) :

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

또는 한 줄보다 긴 헤더의 경우 :

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직접 설정할 수 있습니다 . VimDoc for 입니다. :scrollopt=hor:scrollopt=hor,jumpscrollopt
Michael

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.