将十进制数与其他数字进行比较的脚本

时间:2017-09-20 05:52:49

标签: linux bash

尝试获取某些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 ......

1 个答案:

答案 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