2013-01-30 4 views
9

Sto cercando di trovare un comando Unix (combinazione, forse) su come visualizzare continuamente un file delle sue ultime righe di contenuti. Ma durante questa visualizzazione, voglio che alcune delle prime righe siano sempre visualizzate nella parte superiore dello schermo quando i contenuti rotondi raggiungono la parte superiore dello schermo.come visualizzare continuamente un file delle sue ultime righe di contenuti

È possibile?

(1) Supponiamo che io sono file "job.sta", le prime 2 righe sono: nome del lavoro, il lavoro di John su 2013-Jan-30, ... Tab1, Tab2, Tab3 0, 1 , 2, 1, 90, 89 2, 89, 23 ...

(2) Questo file è il suo funzionamento, i suoi contenuti sono in crescita, e non so che cosa la linea che sta andando a finire .

(3) Quindi desidero visualizzare (sempre) le prime 2 righe quando si utilizza il comando tail, quando il contenuto dell'aggiornamento raggiunge una parte superiore della schermata della shell Unix. Sto usando PuTTY al momento.

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

+0

Non penso che questo potrebbe essere fatto da semplici comandi di shell. correggimi se sbaglio. Stai chiedendo dividere lo schermo in due parti, sopra la parte mostra le 2 linee fisse (appena aggiunte 2 righe in quella sessione), e la parte in giù mostra come coda -f ... sembrerebbe un po 'come il comando superiore .. non sul posto cambiando ma scorrendo. – Kent

risposta

10

Questo aggiornerà ogni 2 secondi invece che ogni volta che i dati vengono scritti nel file, ma forse questo è sufficiente:

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

Ho provato e testato questa è la migliore risposta per soddisfare il mio scopo. Grazie molto. Grazie anche a tutte le altre risposte. Apprezzo molto anche il tuo aiuto. –

+0

Ciao, fratello, Ho una nuova domanda basata sulla tua migliore risposta. Come posso scrivere un comando personalizzato, come watch2. Funziona come segue: $> watch2 job.sta Quindi, otterrà il nome file dagli argomenti della riga di comando. Ho provato molto. Ma sono così incazzato dai simboli della citazione. Hai qualche luce da versare? –

+1

'watch2() {head -n 2" $ 1 "; coda "$ 1"; } ' –

0

Si tenta il nome del file la seguente combinazione tail -f | testa -2

+0

no, non è quello che l'OP vuole "Voglio che alcune delle prime righe siano sempre visualizzate nella parte superiore dello schermo quando i contenuti rotondi raggiungono la parte superiore dello schermo." – Kent

1

Io uso questo script per ottenere l'effetto che si descrive

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

Questo esegue un comando in un ciclo, e cancella le ultime righe della uscita dallo schermo prima di ogni iterazione.

Nel tuo caso sarebbe simile

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

Naturalmente è un po 'brutto prima che il file raggiunge i 30 linee

Speranza che aiuta

4

È possibile utilizzare screen per simulare il comportamento previsto:

  1. Corsa screen, premere Spazio.

  2. Press Ctrl +un seguito da S per dividere lo schermo.

  3. ridimensionare la finestra superiore premendo Ctrl + un seguito da :resize 4.

  4. Nel prompt nella finestra in alto immettere head -n2 file.

  5. Spostarsi nella finestra in basso premendo Ctrl + un seguito da Tab.

  6. avviare una nuova sessione schermo premendo Ctrl + un seguito da c.

  7. Nel nuovo prompt immettere tail -f file.

+0

Questo metodo sembra essere anche una soluzione, anche se ci sono diversi passaggi. Piace anche a me! Grazie! –

20

Io uso questa funzione per tutto il tempo di controllare un file di log in un'altra finestra del terminale.

tail -f <filename> 

Si consiglia di fare un passo in avanti per cercare il testo particolare nel registro. Ottimo se sei interessato solo a vedere qualche elemento particolare che viene scritto nel file.

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