2017-09-20 5 views
0

一部のPRODサーバーでCPU使用率を取得しようとしていて、SunOSサーバー上の特定の値に達すると警告を受け取ります。 10進数を他の数字と比較するスクリプト

は以下しようとしてこれを行うには:

#!/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ファイルから: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" 

最初の2つのコマンドが実行され、期待される結果が得られますが、条件(> 10)をチェックするためにループしているときにファイル "re.txt"の値が10進数の場合、比較できません。

誰かがこのような値をファイルから読み取る方法を比較する方法を教えてください。 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
$3>cpu 5に:第columはgreterは、変数cpuの値である場合、これが意味します。

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は、私はスクリプトに非常に多くの専門家ではない午前:前述のすべての条件を満たしている場合は、ここで

{print "this is test"}を実行

例です。あなたは何が何であり、どの部分が何をしているのかを説明してください。ここで理解するのに少し助けが必要です。 – Kabir

+0

@Kabir最初に希望の結果が得られるかどうかお知らせください。 –

+0

シェルに提案されたコマンドを入れて、以下のエラーが出るまで実行してください:cat thread.sh #!/ usr/bin/sh prstat -a 3 1 | awk -v cpu = 10 'NR <= 5 && NR!= 1 && $ 3> cpu {print "これはテストです"} 'awk:1行目の構文エラー awk:1行目付近の救済 – Kabir

関連する問題