- 締切済み
単位がGB、MB、Bをそろえて計算するには
お世話になります。 コマンドの結果として以下が帰る場合を前提とします。 コマンドの結果================================================== NetVault 7.45 Server "test" - Report "CLI Report" Component 'Media' at 18:36:56, 04 Dec 2007 Group Label Space Left Space Used Format Need Imprt Need Rcvry Unusable A A1 9.9GB 0B CPIO No No No B B1 9.9GB 12MB CPIO No No No C C1 9.9GB 0B CPIO No No No D D1 9.9GB 0B CPIO No No No ================================================== ここから3列目と4列目を使用して使用率を求めたいのですが 単位がGB、MB、Bとばらばらなので awkなどを用いてどのように算出したらよいか悩んでいます。 ご教授いただければ幸いです。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- 1percent
- ベストアンサー率55% (10/18)
かなり強引な処理ですがawk用のスクリプトを作ってみました。下記スクリプトを適当なファイル名で保存して"-f"オプションでawkに読み込ませてください。 「コマンドの結果」をパイプ等でawkに渡す際には余計な入力行が無いことが前提です。 ↓この部分(awkに渡す前に別の処理で取り除いておく) NetVault 7.45 Server "test" - Report "CLI Report" Component 'Media' at 18:36:56, 04 Dec 2007 Group Label Space Left Space Used Format Need Imprt Need Rcvry Unusable また、質問には”KB”については記述されていないのでスクリプトの中にも処理としては記述していません(必要ならif文に追加して下さい)。 ”GNU Awk 3.1.3”で動作確認しています。 /* ---- 以下、awk用スクリプト -------- */ { f3 = $3 f4 = $4 /* 4列目の値の処理 */ if(f4 ~ /.*GB$/){ sub(/GB/,"",f4) f4 = f4 * 1000000000 }else if(f4 ~ /.*MB$/){ sub(/MB/,"",f4) f4 = f4 * 1000000 }else if(f4 ~ /.*B$/){ sub(/B/,"",f4) f4 = f4 } /* 3列目の値の処理 */ if(f3 ~ /.*GB$/){ sub(/GB/,"",f3) f3 = f3 * 1000000000 }else if(f3 ~ /.*MB$/){ sub(/MB/,"",f3) f3 = f3 * 1000000 }else if(f3 ~ /.*B$/){ sub(/B/,"",f3) f3 = f3 } print $0,"->",f4 / f3 * 100,"%" } /* ----- ここまで -----*/ 単位の変換処理で単純に 1GB = 1000MB、1MB = 1000000B としていますがより正確な値を求めるには1GB = 1024MB、・・・とするのが正しいのかもしれません。 されたいことの回答になっていなかったらごめんなさい。