2013-01-30 1 views
9

Ich versuche einen Unix-Befehl (Kombination, vielleicht) zu finden, wie man kontinuierlich eine Datei seiner letzten Zeilen Inhalt anzeigt. Aber während dieser Anzeige möchte ich, dass einige der oberen Zeilen immer auf der Bildschirmoberseite angezeigt werden, wenn der rollende Inhalt die Bildschirmoberseite erreicht.Wie man eine Datei der letzten Zeilen des Inhalts fortlaufend anzeigt

Ist das möglich?

(1) Angenommen, ich Datei haben, "job.sta", die ersten 2 Zeilen sind: Jobnamen, Johns Job auf 2013-Jan-30, ... Tab1, Tab2, Tab3 0, 1 , 2, 1, 90, 89 2, 89, 23 ...

(2) Diese Datei ist auf dem laufenden, dessen Inhalt wächst ständig, und ich weiß nicht, welche Linie es geht zu Ende .

(3) Also ich möchte (immer) die ersten 2 Zeilen anzeigen, wenn Sie den Befehl tail verwenden, wenn der Aktualisierungsinhalt einen Unix-Shell-Bildschirm erreicht. Ich benutze PuTTY im Moment.

Referenz: http://www.unix.com/unix-dummies-questions-answers/172000-head-tail-how-display-middle-lines.html

+0

Ich glaube nicht, dass dies durch einfache Shell-Befehle getan werden könnte. korrigiere mich, wenn ich falsch liege. Du fragst den Bildschirm in zwei Teile, über dem Teil werden die festen 2 Zeilen angezeigt (neu die ersten 2 Zeilen in dieser Sitzung), und der untere Teil zeigt etw wie tail -f ... es würde ein wenig wie der oberste Befehl aussehen. nicht an Ort und Stelle, sondern Scrollen. – Kent

Antwort

10

Dies wird alle 2 Sekunden, anstatt zu aktualisieren, wenn Daten in die Datei geschrieben wird, aber vielleicht ausreichend, das ist:

watch 'head -n 2 job.sta; tail job.sta' 
+0

Ich habe versucht und getestet, das ist die beste Antwort für meinen Zweck. Danke vielmals. Auch danke an alle anderen Antworten. Ich schätze auch deine Hilfe sehr. –

+0

Hallo, Bro, Ich habe eine neue Frage basierend auf Ihrer besten Antwort. Wie kann ich einen benutzerdefinierten Befehl wie watch2 schreiben? Es läuft wie folgt: $> watch2 job.sta So wird es den Dateinamen von den Befehlszeilenargumenten erhalten. Ich habe viel versucht. Aber ich bin so sauer von den Zitatsymbolen. Hast du Licht zu vergießen? –

+1

'watch2() {Kopf -n 2" $ 1 "; Schwanz "$ 1"; } ' –

0

Sie versuchen, den Dateinamen -f tail folgende Kombination | Kopf -2

+0

Nein, es ist nicht das, was OP will "Ich möchte, dass einige der oberen Zeilen immer auf dem Bildschirm angezeigt werden, wenn die rollenden Inhalte die Bildschirmoberseite erreichen." – Kent

1

Ich benutze dieses Skript den Effekt, den Sie

!#/bin/bash 
while [ 1 ]; do ls -lt data | head -n 30; sleep 3; echo -en "$(tput cuu 30; tput ed)"; done 

Diesen einen Befehl ausgeführt wird, bevor jede Iteration in einer Schleife, und löscht die letzten Zeilen der Ausgabe von dem Bildschirm beschreiben zu erreichen.

In Ihrem Fall wäre es etwa so aussehen

!#/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 

Natürlich ist es ein bisschen hässlich ist, bevor die Dateien 30 Zeilen

Hoffnung erreicht, das

4

Sie hilft screen verwenden können, die simulieren erwartetes Verhalten:

  1. Führen Sie screen, drücken Sie Raum.

  2. Presse Ctrl +ein gefolgt von S den Bildschirm zu teilen.

  3. das obere Fenster Resize von Drücken von Strg +ein gefolgt von :resize 4.

  4. Geben Sie in der Eingabeaufforderung im oberen Fenster head -n2 file ein.

  5. nach unten bewegen Fenster durch Drücken von Strg +ein gefolgt von Tab.

  6. Starten Sie eine neue Bildschirm-Sitzung von Strg +ein gefolgt von c.

  7. Geben Sie in der neuen Eingabeaufforderung tail -f file ein.

+0

Diese Methode scheint auch eine Lösung zu sein, obwohl es ziemlich viele Schritte gibt. Ich mag es auch! Vielen Dank! –

20

Ich benutze diese Funktion die ganze Zeit eine Protokolldatei in einem anderen Terminal-Fenster zu überwachen.

Ich empfehle, einen Schritt vorwärts zu machen, um nach bestimmten Text im Protokoll zu suchen. Großartig, wenn Sie nur einen bestimmten Eintrag sehen möchten, der in die Datei geschrieben wird.

tail -f <filename> | grep <keyword or pattern> 
Verwandte Themen