2013-01-30 2 views
9

Я пытаюсь найти команду Unix (комбинация, возможно) о том, как непрерывно отображать файл из последних нескольких строк содержимого. Но во время этого отображения я хочу, чтобы некоторые верхние строки всегда отображались на экране сверху, когда текущее содержимое доходило до верхней части экрана.Как постоянно отображать файл из последних нескольких строк

Возможно ли это?

(1) Предположим, у меня есть файл, "job.sta", первые 2 строки являются: имя задания, работа Джона в 2013-Янв-30, ... Tab1, Таб2, TAB3 0, 1 , 2, 1, 90, 89 2, 89, 23 ...

(2) Этот файл находится на работающем, его содержание растут, и я не знаю, что линия это будет конец ,

(3) Итак, я хочу отображать (всегда) первые 2 строки при использовании команды tail, когда содержимое обновления достигает верхней части экрана оболочки Unix. На данный момент я использую PuTTY.

Ссылка: http://www.unix.com/unix-dummies-questions-answers/172000-head-tail-how-display-middle-lines.html

+0

Я не думаю, что это можно сделать с помощью простых команд оболочки. исправьте меня, если я ошибаюсь. Вы просите разделить экран на две части, над частью показаны фиксированные 2 строки (недавно добавленные 2 строки в этом сеансе), а нижняя часть показывает sth, как tail -f ... он будет немного похож на верхнюю команду. не меняется, но прокручивается. – Kent

ответ

10

Это будет обновляться каждые 2 секунды, а не всякий раз, когда данные записываются в файл, но, возможно, это адекватная:

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

Я пробовал и тестировал, это лучший ответ в соответствии с моей целью. Большое спасибо. Также благодаря всем остальным ответам. Я также очень ценю вашу помощь. –

+0

Привет, Bro, У меня новый вопрос, основанный на вашем лучшем ответе. Как написать индивидуальную команду, например watch2. Он работает следующим образом: $> watch2 job.sta Итак, он получит имя файла из аргументов командной строки. Я пробовал много. Но меня так раздражают символы цитаты. У вас есть какой-нибудь свет для пролить? –

+1

'watch2() {head -n 2" $ 1 "; хвост «1 доллар»; } ' –

0

Вы пытаетесь следующую комбинацию хвост -f имя_файла | голова -2

+0

Нет, это не то, что хочет OP. «Я хочу, чтобы некоторые верхние строки всегда отображались на экране, когда текущее содержимое доходило до верхней части экрана». – Kent

1

Я использую этот скрипт для достижения эффекта вы охарактеризовали

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

Это запускает команду в цикле, и удаляет последние строки вывода с экрана перед каждой итерации.

В вашем случае это будет выглядеть как

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

Конечно, это немного уродливые, прежде чем файл достигнет 30 строк

Надежда, что помогает

4

Вы можете использовать screen для имитации ожидаемое поведение:

  1. Пробег screen, press Пробел.

  2. Нажмите Ctrl + с последующим S, чтобы разделить экран.

  3. Изменение размера верхнего окна, нажав Ctrl + с последующим :resize 4.

  4. В строке в верхнем окне введите head -n2 file.

  5. Переместить в нижнее окно, нажав Ctrl + с последующим Tab.

  6. Начать новую сессию экрана, нажав Ctrl + с последующим с.

  7. В новом приглашении введите tail -f file.

+0

Этот метод также является решением, хотя есть несколько шагов. Мне тоже нравится! Спасибо! –

1

Вы хотите, чтобы программа multitail, которая не только делает вещи разделения экрана, но также будет выполнять цветовое кодирование.

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

20

Я использую эту функцию все время следить за лог-файл в другом окне терминала.

tail -f <filename> 

Я рекомендую сделать шаг вперед, чтобы найти конкретный текст в журнале. Отлично, если вас интересует только то, что в файл записана какая-то конкретная запись.

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