2016-12-21 9 views
0

でelse文は、私はCPUとディスクI/Oの値を取得するために、以下のコードインラインbashの

iostat -x 1 2 | sed 's/,/./g' | awk '/^avg-cpu/  {c++; a=2} 
       c==2 && a && !--a {printf ("%s,%s,%s,", $1, $3, $4)} 
       c==2 && /^sda/ {printf ("%s,", $14)} 
       c==2 && /^sdb/ {printf ("%s,", $14)} 
       c==2 && /^nvme0n1/ {printf ("%s,",$14)}' 

を実行する場合。私が今しようとしているのは、nvmディスクがあるかどうかのチェックです。もしそのファイルが存在すればutilを出力します。そうでなければ-1.00を出力します。

私は

if [ c==2 && /^nvme0n1/ ] then {printf ("%s,",$14)}; else {printf -1.00}' 

を試してみましたが、私は私に、複数の1.00を与える

awk: cmd. line:5:      if [ c==2 && /^nvme0n1/ ] then {printf ("%s,",$14)}; else {printf -1} 
awk: cmd. line:5:      ^syntax error 
awk: cmd. line:5:      if [ c==2 && /^nvme0n1/ ] then {printf ("%s,",$14)}; else {printf -1} 
awk: cmd. line:5:            ^syntax error 
awk: cmd. line:5:      if [ c==2 && /^nvme0n1/ ] then {printf ("%s,",$14)}; else {printf -1} 
awk: cmd. line:5:                   ^syntax error 

c==2 && !/^nvme0n1/ {printf ("%s,",1.00)}' 

を取得しています、私は毎回、各1.00は見つけることができないと思いますそれ。

残念ながら、私はあなたがディスクのスループット使用率を取得しようとしているか-1awkでは利用できませんのようですねShellCheck enter image description here

+0

:このコードは、さらに、既定値を設定する特殊BEGINブロックを使用します。完全なエラーメッセージを投稿してください。 – Rahul

+1

あなたのコードには複数の問題があります。なぜそれがうまくいかないのかを尋ねる前に、shellcheck.netを通して実行して、より簡単に修正できるものを修正してください。 – chepner

+0

@chepnerスペースではないので重複しません。 – jimakos17

答えて

1

から何の助けを得ませんでした。

awkは、独自の、別のスクリプト言語です、そしてあなたはそれに任意のbash構文を使用することはできません。

しかし、主な問題は、すべての行を読むまであなたの番号を見つけたかどうかを判断する方法がないことです。すべての行を処理したら、数字か-1を印刷するかどうかを決定できます。 awkの特別なENDブロックを使用することができます。 `[C == 2 &&/^ nvme0n1 /]` ``の周りの空間に注意[ `と`]であるべきである

iostat -x 1 2 | sed 's/,/./g' | awk ' 
      BEGIN { 
       disk = -1; 
      } 
      /^avg-cpu/  {c++; a=2} 
      c==2 && a && !--a {printf ("%s,%s,%s,", $1, $3, $4)} 
      c==2 && /^sda/ { disk=$14;} 
      c==2 && /^sdb/ { disk=$14; } 
      c==2 && /^nvme0n1/ { disk=$14; } 
      END { 
       printf("%s", disk); 
      } 
     ' 
関連する問題