2016-04-27 48 views
0

我有一個腳本來從jmx.out文件中提取各種參數的度量。有沒有辦法在單一命令中執行邏輯以避免每次讀取jmx.out文件? ?grep從單個文件的多個模式和存儲在每個模式的單獨文件的輸出

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

我不能給用一個命令一個解決方案,但是下面可能會有所幫助:

首先將所有需要的模式把它分配給一個變量(它只是可讀性):

pattern="RpcProcessingTimeAvgTime|DeleteNumOps|CreateFileOps|GetFileInfoNumOps" 
通過grep的輸出

現在環路和重定向匹配線到一個文件,該文件名稱將是當前匹配省略其他字符:

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

但是有限制。當一行包含多個匹配時,它將轉到由首先遇到的模式命名的文件。刪除head -1部分解決了這個問題,但文件名將不合適,那麼如果單個行多次包含相同的模式。

相關問題