Comment faire défiler un grand file de données tout en conservant l'en-tête

Supposons que j'ai un file de données volumineux, qui déborde l'écran dans les deux directions verticale et horizontale. Comment puis-je parcourir ce file, alors que les lignes d'en-tête restnt à l'écran?

Pour l'instant, j'utilise less -S , pour pouvoir faire défiler mon file horizontalement et verticalement. Cependant, lors du défilement vers le bas, les lignes d'en-tête disparaissent évidemment. Y at-il un moyen de garder ceux-ci en utilisant less?

Une alternative consiste à utiliser vim en mode écran partagé avec :set nowrap . Cependant, si je fais défiler horizontalement, la window du haut ne défile pas de la même façon ( :windo set scrollbind ne fonctionne que pour le défilement vertical, autant que je sache).

Si vous êtes familier avec vim, c'est probablement la meilleure option pour vous. Vous pouvez activer la binding de défilement horizontale en l'ajoutant à 'scrollopt' :

 set scrollopt+=hor 

Donc, avec vim -u NONE , vous obtenez le comportement souhaité avec:

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

Vous pouvez ajuster 'sidescroll' et 'sidescrolloff' pour modifier le nombre de colonnes sautées et la distance à laquelle le saut de contour commence respectivement.

Sur les terminaux prenant en charge la définition de la région de défilement:

 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" ) 

(suppose un shell comme zsh ou bash qui définit les variables $COLUMNS et $LINES fonction de la taille du terminal).

Essayez ceci (vous aurez besoin d'installer multitail ):

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

ou, pour les en-têtes de plus d'une ligne:

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

Si vous voulez suivre la sortie de la command au lieu d'un file:

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

ou utilisez -t le cas échéant. Notez que vous devrez peut-être utiliser unbuffer pour que votre sortie de command apparaisse immédiatement.

Vous pouvez utiliser -D pour désactiver l'affichage des lignes d'état pour les forms -wh (cela irait à l' -wh du but du formulaire -t ).

La réponse de Thor n'a pas mentionné la désactivation de la verticale "scrollopt", qui fait défiler les deux windows verticalement. Donc pour moi la solution complète est de coller ceci dans vim:

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

C'est aussi loin que j'ai eu avec tmux :

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

C'est une extension de la réponse de tmux pour le tmux window tmux . Enregistrer sous hless.sh , le rendre exécutable et l'utiliser comme

 hless.sh file