2017-09-20 21 views
0

試圖獲得某些PROD服務器的CPU利用率,並在SunOS服務器上達到某個值時收到警報。從top5.txt文件將十進制數字與其他數字進行比較的腳本

#!/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 

內容:從re.txt文件

cat test.txt 
PID USERNAME CPU 
20845 sql 2.5 
25690 sql 0.3 
986 splunk 0.2 
5 root 0.1 

內容:

這樣做以下嘗試

cat re.txt 
2.5 
0.3 
0.2 
0.1 

四處錯誤:

" [: 0.3%: unknown operator" 

前兩個命令正在執行並給出預期的結果,但在循環檢查條件(> 10)時,如果文件「re.txt」中的值位於十進制數字上,則無法進行比較。

請有人可以告訴一種方式來比較這些值從文件讀取。

感謝ADV ....

回答

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:這意味着如果第三列變爲greer那麼變量的值爲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 
+0

嗨PS,我不是腳本很專業。你能介意解釋什麼是什麼以及哪部分命令在做什麼。需要一點幫助來理解這裏。 – Kabir

+0

@Kabir先請讓我們知道這是否有助於獲得理想的結果? –

+0

同時將建議的命令放到shell並執行得到低於錯誤:cat thread.sh #!/ usr/bin/sh prstat -a 3 1 | awk -v cpu = 10'NR <= 5 && NR!= 1 && $ 3> cpu {print「This is Test ...」}'awk:在第1行附近出現語法錯誤 awk:在第1行附近跳出 – Kabir

相關問題