J'essaie de trouver une commande Unix (combinaison, peut-être) sur la façon d'afficher en continu un fichier de ses dernières lignes de contenu. Mais pendant cet affichage, je veux que certaines des premières lignes soient toujours affichées en haut de l'écran lorsque le contenu roulant atteint le haut de l'écran.
Est-ce possible?
(1) Supposons que j'ai le fichier "job.sta", les 2 premières lignes sont: nom du travail, travail de John le 30 janvier 2013, ... Tab1, Tab2, Tab3 0, 1, 2, 1, 90, 89 2, 89, 23 ...
(2) Ce fichier est en cours d'exécution, son contenu grandit et je ne sais pas quelle ligne il va finir.
(3) Je souhaite donc afficher (toujours) les 2 premières lignes lors de l'utilisation de la commande tail, lorsque le contenu de la mise à jour atteint le sommet de l'écran Unix Shell. J'utilise PuTTY en ce moment.
Référence: http://www.unix.com/unix-dummies-questions-answers/172000-head-tail-how-display-middle-lines.html
Cela sera mis à jour toutes les 2 secondes plutôt que chaque fois que des données sont écrites dans le fichier, mais c'est peut-être suffisant:
watch 'head -n 2 job.sta; tail job.sta'
J'utilise cette fonction tout le temps pour surveiller un fichier journal dans une autre fenêtre de terminal.
tail -f <filename>
Je recommande de faire un pas en avant pour rechercher un texte particulier dans le journal. Idéal si vous souhaitez uniquement voir une entrée particulière en cours d'écriture dans le fichier.
tail -f <filename> | grep <keyword or pattern>
Vous pouvez utiliser screen
pour simuler le comportement attendu:
Exécutez screen
, appuyez sur Space.
Presse Ctrl+a suivi par S pour diviser l'écran.
Redimensionnez la fenêtre supérieure en appuyant sur Ctrl+a suivi par :resize 4
.
Dans l'invite de la fenêtre supérieure, entrez head -n2 file
.
Accédez à la fenêtre inférieure en appuyant sur Ctrl+a suivi par Tab.
Démarrez une nouvelle session d'écran en appuyant sur Ctrl+a suivi par c.
Dans la nouvelle invite, entrez tail -f file
.
J'utilise ce script pour obtenir l'effet que vous décrivez
!#/bin/bash
while [ 1 ]; do ls -lt data | head -n 30; sleep 3; echo -en "$(tput cuu 30; tput ed)"; done
Cela exécute une commande en boucle et supprime les dernières lignes de la sortie de l'écran avant chaque itération.
Dans votre cas, cela ressemblerait à quelque chose
!#/bin/bash
while [ 1 ] ;# loop forever
do
head -n 2 job.sta ;# display first 2 lines
tail -n 30 job.sta ;# display last 30 lines from file
sleep 3 ;# wait a bit
echo -en "$(tput cuu 32; tput ed)" ;# delete last 32 lines from screen
done
Bien sûr, c'est un peu moche avant que votre fichier atteigne 30 lignes
J'espère que cela pourra aider
Vous voulez le programme multitail
, qui non seulement fait le truc de l'écran partagé mais fera aussi le codage couleur.
Vous essayez la combinaison suivante tail -f filename | tête -2