我有一个脚本可以从jmx.out文件中提取各种参数的指标。有办法吗? 在单个命令中实现逻辑以避免每次都读取jmx.out文件?
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 :(得分: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
部分可以解决此问题,但如果单行包含多次相同的模式,则文件名将不合适。
答案 1 :(得分:0)
你可以做
sed -n -e "/CallQueueLength/w call_queue_length.out" -e "/RpcProcessingTimeAvgTime/w rpc_avg_time.out" ...
不客气