2012-03-28 5 views
1

私はDebian 6とGNU sedを使用しています。awkが長い文字列からduの出力をMbとKbのような接尾辞を持つ人間が読めるように変換しようとしています。awkの二重の星の構文エラー**

du /test.img | grep [0-9]* | awk "{ sum=$1 ; hum[1024**3]='Gb';hum[1024**2]='Mb'; 
hum[1024]='Kb'; for (x=1024**3; x>=1024; x/=1024){ if (sum>=x) 
{ printf '%.2f %s\n',sum/x,hum[x];break } }}" 
:(。私はあなたが -hオプションを使用することができます知っているが、私はawkを使って手動でこれをやりたい)

これまでのところ、私のコマンドは、この(私はそれを読みやすくするために改行を入れ)のように見えます

は、しかし、私は、二重星の近くに/から構文エラーを取得:私は、すべての二重星**ただ一つ星*を作る場合

awk: line 1: syntax error at or near * 
awk: line 1: syntax error at or near * 
awk: line 1: syntax error at or near * 
awk: line 1: extra ')' 
awk: line 1: syntax error at or near { 

、awkは動作しますが、私は間違った番号を取得します。

これらの構文エラーを修正して、それを停止するにはどうすればよいですかawkはひどく混乱しますか? BAのDUMのtshh

+2

指数として '**'を使用しようとしていますか?それは '^'じゃない? –

+0

あなたが正しい!それはそれを修正した。 –

+1

バイナリキロバイト(2 ** 10)を使用しているので、それらはGiB、MiB、およびKiBである必要があります。あなたのコードをさらに明確にするために、変数を 'awk -f GiB = ...'か 'BEGIN'ブロックのどちらかで事前定義することもできます。 –

答えて

7

ジャスト(答えとして)それが "公式" にする...

あなたは、べき乗のため**を使用しています。 awkでは、累乗には^演算子が使用されます。私はインターネット上に多くの参考文献があると思いますが、私が見つけたのはhereです。

+1

'^'と '**'はどちらもGNU awk(gawk)で動作します。 –

+1

しかし、Debianのデフォルトのawkは 'mawk'です。 – Kaz

関連する問題