2017-09-26 16 views
0

私は10Gログファイル上で実行する必要がgrepGNU並列を使用して一連のgrepsを実行しますか?

grep -E '[0-9]{3}\.[0-9]+ ms' file.log | grep -v "Cycle Based" | grep -Ev "[0-9]{14}\.[0-9]+ ms" > pruned.log 

の次の文字列を持っています。私はGNU parallelを使用しようとしていますので、少し待つよりも少し時間がかかっていますが、を使ってgrepのチェーンをどのように実行できるかはわかりません。

これは、単一のgrep最速を実行する方法の問題ではない、これはファイルをgrepをすると、ディスクの場合に通常の制限要因並列

+0

[最速のgrep(の可能性のある重複https://stackoverflow.com/questions/9066609/fastest-possible-grep) –

+0

@MichaelFoukarakis、重複はありません。私はすでにその質問を読んでおり、それは私が探しているものではありません。 –

+1

すべての 'grep' cmdsをシェルスクリプトに入れ、' myBigGrep.sh file.log'のように呼び出すことができ、パイプの前にあるファイル名を '$ {@}'に置き換えることができます.'parallel'は、処理する複数のファイル大きなファイルを 'file001.log、file002.log ...'に分割する時間を費やしたいですか?それはうまくいくかもしれませんが、テストに時間がかかります。 log-rotateをインストールするのに時間を費やすほうがよいので、毎日(毎時?)のログファイルがあります。がんばろう。 – shellter

答えて

2

シリーズgrepのSを実行する方法についてです。あなたが1枚のディスクを持っているならば、これはあなたを制限することになります。

しかし、あなたはRAID10// 60 50または分散ネットワークファイルシステムを持っている場合は、あなたの処理をスピードアップすることがあり並列化:

doit() { 
    grep -E '[0-9]{3}\.[0-9]+ ms' | grep -v "Cycle Based" | grep -Ev "[0-9]{14}\.[0-9]+ ms" 
} 
export -f doit 
parallel --pipepart -a file.log --block -1 -k doit > pruned.log 
関連する問題