最後の数行の内容のファイルを継続的に表示する方法について、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
これは、データがファイルに書き込まれるときではなく、2秒ごとに更新されますが、おそらくそれで十分です。
watch 'head -n 2 job.sta; tail job.sta'
私はこの関数を常に使用して、別のターミナルウィンドウでログファイルを監視しています。
tail -f <filename>
ログで特定のテキストを探すために、一歩前進することをお勧めします。特定のエントリがファイルに書き込まれるのを見たいだけの場合に最適です。
tail -f <filename> | grep <keyword or pattern>
screen
を使用して、予想される動作をシミュレートできます。
screen
を実行し、 Space。
押す Ctrl+a に続く S 画面を分割します。
を押して上部ウィンドウのサイズを変更します Ctrl+a :resize 4
が後に続きます。
上部ウィンドウのプロンプトで、head -n2 file
と入力します。
を押して下のウィンドウに移動します Ctrl+a に続く Tab。
を押して新しい画面セッションを開始します Ctrl+a に続く c。
新しいプロンプトで、tail -f file
と入力します。
私はこのスクリプトを使用して、あなたが説明する効果を達成します
!#/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行に達するまでは少し醜いです
それが役に立てば幸い
multitail
プログラムが必要です。このプログラムは、分割画面の処理だけでなく、色分けも行います。
次の組み合わせのtail -f filename |頭-2