尝试获取某些PROD服务器的CPU利用率,并在SunOS服务器上达到特定值时收到警报。
在下面尝试这样做:
#!/usr/bin/sh
CPU=10
prstat -a 3 1 | awk '{print $1,$2,$9;}' | head -5 > top5.txt
cat top5.txt | awk '{print $3;}' | sed '1d' > re.txt
if [ `cat re.txt` -gt $CPU ];
then
echo "this is TEST"
fi
来自top5.txt文件的内容:
cat test.txt
PID USERNAME CPU
20845 sql 2.5
25690 sql 0.3
986 splunk 0.2
5 root 0.1
来自re.txt文件的内容:
cat re.txt
2.5
0.3
0.2
0.1
获取错误:
" [: 0.3%: unknown operator"
前两个命令正在执行并给出预期结果,但是当它循环检查条件(> 10)时,如果来自文件" re.txt"的值,则无法进行比较。在十进制数字上。
请有人可以告诉您从文件中比较这些值的方法。
感谢ADV ......
答案 0 :(得分:0)
prstat -a 3 1|awk -v cpu=10 'NR<=5 && NR!=1 && $3 > cpu{print "This is Test..."}'
这是一个awk
解决方案,并不是完全纯粹的bash,所有条件都存在。另请注意,为您的处理创建临时文件不是一个很好的解决方案。(如top5.txt ,re.txt
)。
说明:
awk -v cpu=10
:这是为名为cpu
的awk变量赋值
NR<=5
:这意味着前5行
NR!=1
:不是第一行
NR<=5 && NR!=1
:这个组合方式,第2到第5行
$3>cpu
:这意味着如果第三列是greter,那么变量cpu
的值。
如果满足上述所有条件,则执行{print "this is test"}
以下是示例:
echo "$x"
PID USERNAME CPU
20845 sql 2.5
25690 sql 0.3
986 splunk 0.2
5 root 0.1
4 test 11
echo "$x" |awk -v cpu=10 'NR<=6 && NR!=1 && $3 > cpu{print "This is Test... " $0}'
This is Test... 4 test 11