複数のログファイルがあるディレクトリを使用しています。
各ログファイルに書き込まれた行数の実行回数(定期的に更新)を表示しようとしています。
ファイル名で索引付けされ、1サイクルあたり(例えば1秒あたり)各ファイルに書き込まれた行数を確認する必要があります。
ボーナスポイントの場合、行は1秒あたりに作成された行数の降順でソートする必要があります。
必ずしもそのようなものを使用する必要はありませんncurses
(例:トップ)。サイクルごと(毎秒)ごとに更新を作成してもかまいません。
これをどのように実行しますか?
私の解決策を答えとして含めましたが、これを行うより良い方法があるようです...もっと良い方法を学びたい!
答え1
watch
私は(読む)次を使用しますman watch
:
watch --differences wc -l *.log
答え2
強制Unixツールのみを使用する無差別代入方法:
while :; do wc -l *; echo "-"; sleep 1; done |
awk '/^-/{print; next} {print $2, $1, $1-prev[$2]; prev[$2]=$1}'
上記のコードは、毎秒ごとに各ファイル名を印刷し、ファイルの現在の行数と最後の反復以降の行数の変更を印刷します。すべてのファイルの総行数に対して同じ操作が行われます。
awk出力を適切に調整するには、パイプを介して必要に応じて並べ替え、各呼び出しの前にaを追加できますsort -k3,3n
(またはawkがaの後の最初の行を読むたびに、awkから関連するエスケープシーケンスを印刷します)。各ループの電流出力。tput clear;
wc -l
-
答え3
私が考えることができる最善の方法は、次のようにtail -f
使用することです。awk
logtop
:
tail -f * | awk '/^==> / {a=substr($0, 5, length-8); next} {print a}' | logtop