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

标签 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....

最佳答案

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 :这意味着如果第三列更大,那么变量的值 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

关于linux - 将十进制数与其他数字进行比较的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46314223/

相关文章:

c - insmod : ERROR: Could not insert module : No such device

linux - 在内核 3.8 x 中编译时,内核代码中的 netlink_kernel_create 不起作用

linux - 设置 Wavecom M1206B-ON USB0

python - 主管错误 "child process was not spawned"

bash - 如何通过Shell(BASH/ZSH/SH)获取文件的绝对路径?

linux - 如何使用 rsync 命令在 Linux 中复制当前日期文件或特定日期文件?

ruby-on-rails - 乘客的适当文件夹权限

linux - 可以使用与管道命令的输出相同的输入文件吗?

bash - 如何根据 awk 中的多个范围计算行数?

函数 fork (&) 的 bash 变量范围问题