web-dev-qa-db-ja.com

内容の最後の数行のファイルを継続的に表示する方法

最後の数行の内容のファイルを継続的に表示する方法について、Unixコマンド(おそらく組み合わせ)を見つけようとしています。しかし、この表示中に、ローリングコンテンツが画面上部に到達したときに、上部行の一部が常に画面上部に表示されるようにしたいと思います。

それは可能ですか?

(1)「job.sta」というファイルがあるとします。最初の2行は次のとおりです:ジョブ名、2013年1月30日のJohnのジョブ、... 89 2、89、23 ...

(2)このファイルは実行中であり、その内容は増え続けており、どの行で終わるかわかりません。

(3)更新内容がUnixシェルの画面上部に到達したときに、tailコマンドを使用するときに最初の2行を(常に)表示したいと思います。現在、PuTTYを使用しています。

リファレンス: http://www.unix.com/unix-dummies-questions-answers/172000-head-tail-how-display-middle-lines.html

20
Wen_CSE

これは、データがファイルに書き込まれるときではなく、2秒ごとに更新されますが、おそらくそれで十分です。

watch 'head -n 2 job.sta; tail job.sta'
18
William Pursell

私はこの関数を常に使用して、別のターミナルウィンドウでログファイルを監視しています。

tail -f <filename>

ログで特定のテキストを探すために、一歩前進することをお勧めします。特定のエントリがファイルに書き込まれるのを見たいだけの場合に最適です。

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

screenを使用して、予想される動作をシミュレートできます。

  1. screenを実行し、 Space

  2. 押す Ctrl+a に続く S 画面を分割します。

  3. を押して上部ウィンドウのサイズを変更します Ctrl+a :resize 4が後に続きます。

  4. 上部ウィンドウのプロンプトで、head -n2 fileと入力します。

  5. を押して下のウィンドウに移動します Ctrl+a に続く Tab

  6. を押して新しい画面セッションを開始します Ctrl+a に続く c

  7. 新しいプロンプトで、tail -f fileと入力します。

8
choroba

私はこのスクリプトを使用して、あなたが説明する効果を達成します

!#/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行に達するまでは少し醜いです

それが役に立てば幸い

3
user000001

multitailプログラムが必要です。このプログラムは、分割画面の処理だけでなく、色分けも行います。

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

2
Andy Lester

次の組み合わせのtail -f filename |頭-2

1