2017-11-10 6 views
-1

私は3つのコマンドを実行しようとしていますが、何らかのパーセンテージ計算が必要な変数を出力として取得し、例と同じように表示しています。これをスクリプトとして実行することができます。awk num関数のエラー

私はコマンドを実行するホストにデータを保存できません。私のスクリプトはローカルシステム上にあり、リモートホスト上で実行され、データをローカルマシンに戻します。この作業を達成するための方法はありますか?

まずコマンドの出力

$ isi status -q | grep -e "^Size" -e "^Used" -e "^Avail" 
Size:573T 
Used:448.0T 
Avail:74T 

2番目のコマンドの出力

$ isi_classic snapshot usage | tail -n 1 | awk '{printf "\t\t\tSnapshot USED %=%.1f%%\n", $4}' 
    Snapshot USED =0.6% 
$ isi_classic snapshot usage | tail -n -1 | awk '{ print "\t\t\tSnapshot USED:" $1}' 
    Snapshot USED=3.2T 

サンプルスクリプトのawkスクリプトが動作していません。除外空間

# isi status -q | grep -e "^Size" -e "^Used" -e "^Avail" | awk 'function print (num) 
pipe pipe quote> /Size:/ {TotalSize=$NF~} 
pipe pipe quote> /Used:/ {TotalUsed=$NF} 
pipe pipe quote> /Avail:/ {TotalAvail=$NF} } 
pipe pipe quote> END { 
pipe pipe quote>  used=TotalUsed/Total_Size*100 
pipe pipe quote>  system("isi_classic snapshot usage | tail -n -1 | awk '{ print "Snapshot_used=" $1}'") 
pipe pipe quote>  system("isi_classic snapshot usage | tail -n 1 | awk '{printf "Snapshot_per :%.1f\n", $4}'") 
pipe pipe quote>  Usedw/o=Total Used-Snapshot USED/Total Size 
pipe pipe quote>  print hostname ": " "\t","Total Size:" Total_Size 
pipe pipe quote>  printf "\t\t\tTotalUsed:%.1f\n", TotalUsed, "TB" 
pipe pipe quote>  printf "\t\t\tTotalAvail:%.1f\n", TotalAvail, "TB" 
pipe pipe quote>  printf "\t\t\tTotalUsed %:%.1f\n", used, "TB" 
pipe pipe quote>  printf "\t\t\tSnapshot Used :%.1f\n", Snapshot_used, "TB" 
pipe pipe quote>  printf "\t\t\tSnapshot Used %:%.1f\n", Snapshot_per, "TB" 
pipe pipe quote>  printf "\t\t\tUsed w/o:%.1f\n", Usedw/o, TB)' 
awk: syntax error at source line 1 
context is 
     function >>> print <<< (num) 
     missing } 
     missing) 
awk: bailing out at source line 7 

サンプル要件

Total Size  : 573 TB 
Total Used  : 448.0 TB 
Total Available : 74 TB 
Total Used % : 86.1 % # Total Used(%) = Total Used/Total Size *100 = 86.1(%) 
Snapshot Used : 3.2 TB 
Snapshot Used % : 0.6 % 
Used w/o  : 85.5 % # {(Total used)-(Snapshot used)}/(Total size) = 85.49% 
+1

を正規化するためにその情報が必要になります単位の変更(すなわちGに)場合には注意してくださいawkについてです、すべての無関係なものを取り除く。 'isi status -q |の結果を保存します。 grep -e "^ Size" -e "^ Used" -e "^ Avail" 'ファイル内にあります。そのファイルをできるだけ小さくして(1行?)、まだawkコマンドで問題を示しています。 awkスクリプトを可能な限り小さくして、まだエラーが出る場所を作ります。良いチャンスがありますが、小さな入力、小さなスクリプト、期待される結果、実際の結果を投稿しない場合は、問題が表示されます。 – jas

+0

私はこれを複数のホストで実行していますので、出力をファイルに保存できます(許可されていません)。私のローカルシステムでは、このスクリプトが存在し、私はこのスクリプトをホスト上で実行するようにプッシュし、その結果をファイルに戻します。 – Shanker

+0

@jasはそれが解決策であるとは言っていませんが、彼女は質問をするために[mcve]を作成する方法を教えています。あなたは 'isi_whatever'の出力を構文解析する助けを求めています - そのコマンドを持っていないので、どのように出力されているのか/ awkへの入力はあなたが私たちを見せない場合のように見えますか? 「サンプル要件」 - サンプル入力または期待される出力とは何ですか?どちらか一方が欠けています。それがはっきりしない場合は[ask]を参照してください。 –

答えて

0

後、私はあなたのawkのコードといくつかの構文上の問題があると考えています。 IFSのように:「」あなたはシェル+ awkの

使用を使う、という場合はここでスタートだ(「-Fを:」)(末尾の「 - 」)標準入力から

ストア入力キーラベルをインデックスとする配列で例えばawkのが厄介な末尾の「T」を取り除く持っているサイズ

$ NF + 0 **あなたが質問した場合

[stdin] | awk -F\: '{a[$1]=($NF+0)} END{ ... grind stats here ...}' - 
関連する問題