web-dev-qa-db-fra.com

comment afficher en continu un fichier de ses dernières lignes de contenu

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

20
Wen_CSE

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'
18
William Pursell

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>
39
wacko413

Vous pouvez utiliser screen pour simuler le comportement attendu:

  1. Exécutez screen, appuyez sur Space.

  2. Presse Ctrl+a suivi par S pour diviser l'écran.

  3. Redimensionnez la fenêtre supérieure en appuyant sur Ctrl+a suivi par :resize 4.

  4. Dans l'invite de la fenêtre supérieure, entrez head -n2 file.

  5. Accédez à la fenêtre inférieure en appuyant sur Ctrl+a suivi par Tab.

  6. Démarrez une nouvelle session d'écran en appuyant sur Ctrl+a suivi par c.

  7. Dans la nouvelle invite, entrez tail -f file.

8
choroba

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

3
user000001

Vous voulez le programme multitail, qui non seulement fait le truc de l'écran partagé mais fera aussi le codage couleur.

http://www.vanheusden.com/multitail/

2
Andy Lester

Vous essayez la combinaison suivante tail -f filename | tête -2

1
sameer karjatkar