2016-04-27 6 views
0

jmx.outファイルからさまざまなパラメータのメトリックを取得するスクリプトがあります。 jmx.outファイルを毎回読み取ることを避けるためにロジックを単一のコマンドで実装する方法はありますか?grep複数のパターンを1つのファイルから取り出し、パターンごとに別々のファイルに出力します。

curl -s "server.hostname.com:12345/jmx"   > jmx.out 
cat jmx.out | grep -E "CallQueueLength"   >> call_queue_length.out 
cat jmx.out | grep -E "RpcProcessingTimeAvgTime" >> rpc_avg_time.out 
cat jmx.out | grep -E "DeleteNumOps"    >> DeleteNumOps.out 
cat jmx.out | grep -E "CreateFileOps"   >> CreateFileOps.out 
cat jmx.out | grep -E "GetFileInfoNumOps"  >> GetFileInfoNumOps.out 
+0

ファイル名は変更できますか?読める5つ以上のパラメータがありますか? –

答えて

0

は、私は1つのコマンドで解決策を与えることができないんだけど、次は役に立つかもしれ:

組み合わせ最初に必要なすべてのパターンは、単一の変数に代入(それだけのためです読みやすさ):grepの出力を通じて

pattern="RpcProcessingTimeAvgTime|DeleteNumOps|CreateFileOps|GetFileInfoNumOps" 

今ループと名前が他の文字を省略し、現在の試合になりますファイルにマッチした行をリダイレクト:

grep -E $pattern jmx.out | while read line 
          do fileName=`echo $line | grep -oE $pattern | head -1` 
          echo $line >> $fileName 
          done 

ただし、それには制限があります。 1つの行に複数のマッチがある場合、最初に見つかったパターンで指定されたファイルに移動します。 head -1部分を削除するとこの問題は解決されますが、1行に同じパターンが複数回含まれているとファイル名が適切ではありません。

関連する問題