• 締切済み

単位が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などを用いてどのように算出したらよいか悩んでいます。 ご教授いただければ幸いです。

みんなの回答

  • 1percent
  • ベストアンサー率55% (10/18)
回答No.1

かなり強引な処理ですが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、・・・とするのが正しいのかもしれません。 されたいことの回答になっていなかったらごめんなさい。

関連するQ&A

  • エクセルの計算式が分かりません

    調べてもわからないので、教えて下さい。 今エクセルを開いています。 A列には、数値を入れるとパーセンテージで表示されるようになっています。 B列にはA,B,C,D,Eのどれかを入力するようになっています。 ちなみにこれは会社の評価シートで、A=100、B=80, C=60, D=40, E=20という数字に対応しています。 ここで、B列にたとえばCと入力されたら、B列にそのままCと 表示されるのではなく、A列の数値×60点(Cの評価点)という 掛け算の結果を表示させることは可能でしょうか? 分かりづらくてすみませんが、よろしくお願いします。

  • Excel2003 または07に関しての集計

    B列のデータがあります。このデータの個数を数えようとしています。 (1)が2つ、(2)とAAが各1あります。 それがc列で、式の結果がd列、式がe列です。 d列の結果が明らかにおかしいです。何故でしょうか? なお、下表でアンダーバー_はスペースです。 ____B____ C____ D____ E 2____ (2) 3 4____ AA 5____ (1) 6 7____ (1) ------- 9____ (1)___ 2____ 2____ =COUNTIF($B$2:$B$7,CB9) 10 ___ (2)___ 1____ 2____ =COUNTIF($B$2:$B$7,C10) 11 ___ AA___ 1____ 2____ =COUNTIF($B$2:$B$7,C11) 以上

  • VBAを使ってシートAの3ヶ所のセルでシートBの計算式を行う。

    シートA    シートB   A B C D     A B C D 1 10 20 30 ()   1 10 20 30 (計算式) 2 10 20 30 () 3 10 20 30 () 4 10 20 30 () (1)シートAのA1,B1,C1をコピーしてシートBのA1,B1,C1に代 入する。D1には計算式が入っているので結果が表示される。 (2)シートD1の計算結果をシートAのD1に代入する。 (3)次はシートAのA2,B2,C2をコピーしてシートBのA1,B1,C1 に代入する。D1には計算式が入っているので結果が表示される。  シートD1の計算結果をシートAのD2に代入する。 (4)上記の動作をシートAのA列のセルに数字がある場合は繰り返し行  う。

  • エクセルでA列-B列=C列 の抽出方法について

    エクセルの初歩的な質問になってしまうかもしれませんが A列の値からB列の値で重複する値を削除して C列を作る方法を教えてください。 A列 a b c d B列 c d から 結果 C列 a b のような結果が得られる処理方法を お願い致します。

  • 計算式の貼付けについて

    初歩的なことかもしれませんが、教えてください。    A  B  C  D 1 10  =A5 =B5 =C5 2 20     =B6 =C4 3 25     =B7 =C3 4 18     =B8 =C2 5 12     =B9 =C1 セルB1の式をコピーしてCの列に貼り付けると通常C列ように張り付きますよね、D列のように行数が減るように貼り付けるにはどのようにすればよいのでしょうか?

  • エクセル2007の計算について

    エクセル2007の計算についてですが、A列に100個データがあり、B列とC列にそれぞれ1個データがあるとします。そこで、D列のD1にA1*B1-C1の計算結果を表示させました。次に、D2以下も同様の計算をするために、D1のセルを選択して、矢印無しの十字キーを下に伸ばしてD2にA2*B1-C1、D3にA3*B1-C1・・・、D100にA100*B1-C1の結果を表示させようとすると、100個分の計算結果は表示できるのですが、D2はA2*B2-C2、D3はA3*B3-C3・・・というように、B列とC列も一つずつ下がって計算されてしまいます。この場合、B列とC列には1個しかデータがない(B1に一個、C1に一個)ため、D2以下の計算結果は0になります。B列とC列を下げずに、A列のデータだけ下げて連続計算するにはどうすればよろしいでしょうか。

  • EXCELの計算式

    SHEET1 A列  B列  C列 1   50   a 51  60   b 61  70   c 71  80   d という表を作っておいて、 SHEET2のA列に1から80までの任意の数字を入れたときに、B列に a,b,c,dのいずれかを表示させたいのですが(以下参照)、 A列  B列 8   a 55   b どのような計算式を使えばいいでしょうか。 よろしくお願いします。

  • 【エクセル】 条件を満たした値の計算

    いつもお世話になっております。   A列  B列  C列 1  あ   A   a 2  い   B   b  3  い   C   c 4  あ   D   d ・  ・   ・   ・ ・  ・   ・   ・ ・  ・   ・   ・ A列が『あ』の行のB列・C列の値を使って、  (A×a+D×d)/(a+d)  (4行以降も『あ』があります) 上記のような計算をしたいのですが、 どのように関数を使ったらよいか分かりません。教えていただけないでしょうか。 どうぞ宜しくお願い致します。    

  • エクセル:セルの右下を引っ張っても計算をしてくれない

    例えば、B,C,D列の2つの数字を足したいとき、 B C D 2 4 6 1 3 5 b c d bのセルに ”= 2[セル指定] + 1[セル指定]” の式を入力し計算をさせ、その後はbのセルの右下を Dまで引っ張っると、自動的に   c = 4 + 3 d = 6 + 5 という風になり、c~dに計算式を入力しなくても、 計算してくれていたのに、 今朝から計算が出来なくなってしまっています。 今の状況は、 b:通常通り計算する c:セル内の式は、c式が書かれているものの、結果はb d:セル内の式は、d式が書かれているものの、結果はb しかし、c~dのセルをダブルクリックして、 リターンを押すと、正常な計算をしてくれます。 これは、なにかエクセルの設定をかえたら直りますか? 教えてください。お願いします。

  • AテーブルからBテーブルへの展開

    表題のとおりAテーブルのデータを展開し、 BテーブルへINSERTするというPLSQLを考えています。 以下ような感じです。 Aテーブル No 列A1 列B1 列C1 列D1 列A2 列B2 列C2 列D2 列A3 列B3 列C3 列D3 -------------------------------------------------------------- 上記表のデータを Bテーブル No 列BA 列BB 列BC 列BD ------------------------- No 列A1 列B1 列C1 列D1     ←列名の末尾が1のもの No 列A2 列B2 列C2 列D2     ←列名の末尾が2のもの No 列A3 列B3 列C3 列D3     ←列名の末尾が3のもの と、いう感じでBテーブルへ。 Aテーブルの列名は”列A1”のように末尾に数字がついておりBテーブルへは 末尾が同じものを1レコードとしてINSERTします。 これを実現する方法として CURSOR csr IS SELECT * FROM ( SELECT 列A1 ,列B1 ,列C1 ,列D1 FROM Aテーブル UNION SELECT 列A2 ,列B2 ,列C2 ,列D2 FROM Aテーブル UNION SELECT 列A3 ,列B3 ,列C3 ,列D3 FROM Aテーブル ); 上記のようにカーソルで処理してINSERTする以外に方法がありますでしょうか 因みにこの例では1~3項目ですが実際には1~15項目まであります。 BテーブルへINSERTする列数も13列存在します。 DBはORACLE9iです