0

現在、時々確認したいシステム ログ (この場合、Growl.app) があります。grep を使用して、表示したくない行を除外します。

cat /Users/Daniel/Library/Logs/Growl.log | grep -vE 'registered|Display frame|Reserving|Used rects|Beginning a pass|Successfully reserved|Adjusted display frame|---|User went idle|User returned|positionDisplay|primaryDirection|Bowtie:|secondaryDirection' | tail -20 > /Users/Daniel/Library/Logs/Growl-log.txt
sleep 2
qlmanage -p /Users/Daniel/Library/Logs/Growl-log.txt

情報を除外するより良い方法があるかどうかはわかりませんが、私のスクリプトはそのコマンドを処理するのにかなりの時間がかかります。私のハードウェアが間違いなくそれを妨げていないことを追加することもできます. 注意すべきもう 1 つの点は、「qlmanage」部分が、テキスト ファイルの内容を「クイック ルック」ウィンドウに表示する OS X 固有のコマンドであることです。リクエストを表示するときは瞬時です。

何か案は?

4

1 に答える 1

2

システムに、非常に大きな、おそらく継続的に成長しているファイルを読み取り、多数の検索に基づいて一連のレコードを削除するように要求しています(各代替:| z | c | V ..など)。そして、実行するように要求するたびに、より多くのレコードを処理する必要があります。

ログにはタイムスタンプがありますか? タイムスタンプ (またはさらに良いのは、tail)、grep と組み合わせて、毎日または毎時間、はるかに小さなファイルに必要なものを含むジョブを実行することができます。

基本的に、数秒で要求したことをすべて実行して数百 MB を読み取ることはできません。tail から始めましょう。これは、ファイル全体を読み取るのではなく、ファイル ポインターを配置することによって機能します。もっと早く。

tail -20000 /Users/Daniel/Library/Logs/Growl.log | 
grep -vE 'registered|Display frame|Reserving|Used rects|Beginning a pass|Successfully reserved|Adjusted display frame|---|User went idle|User returned|positionDisplay|primaryDirection|Bowtie:|secondaryDirection' |
> /Users/Daniel/Library/Logs/Growl-log.txt
qlmanage -p /Users/Daniel/Library/Logs/Growl-log.txt

20000 を調整して、フィルターを通過する適切な数のサンプルを取得します。言い換えればprefilter、とにかく売り込む初期のレコードを削除することによってファイル。

もう 1 つの高速化は、肯定的な検索を行うことです。必要でないものではなく、必要なものを grep します。

おめでとうございます。UUOC 賞も受賞しました。用語については Mr google を試してみてくださいUUOC(猫と関係があります)。誰もがそれについて知る前に賞を受賞しています

于 2013-03-17T00:27:12.240 に答える