2012-03-28 106 views
1

我使用的是Debian 6和GNU sed,试图让awk将du的输出从一长串字节转换为一个更具人类可读性的数字,后缀如Mb和Kb。 (我知道你可以使用-h选项,但我想使用awk手动执行此操作。)与双星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 } }}" 

不过,我得到的语法错误从/双恒星附近:

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 wardly混淆? BA达姆tshh

+2

你试图使用''**作为指数?那不是'^'? – 2012-03-28 18:19:05

+0

哎呀!你是对的!这解决了它。 – 2012-03-28 18:20:49

+1

这些应该是GiB,MiB和KiB,因为您使用的是二进制千字节(2 ** 10)。为了进一步阐明你的代码,你可以通过'awk -f GiB = ...'或者'BEGIN'模块预先定义常量作为变量。 – 2012-03-28 22:08:36

回答

7

只是为了让 “官”(如一个答案)...

您使用**乘方。在awk中,运算符^用于取幂。我想在互联网上有很多参考文献,但我发现的是here

+1

'^'和'**'在GNU awk(gawk)中工作。 – 2012-03-28 19:10:00

+1

但Debian的默认awk是'mawk',oops。 – Kaz 2012-03-28 21:39:35