双星的awk语法错误**

时间:2012-03-28 18:15:52

标签: linux bash sed awk

我正在使用Debian 6和GNU sed,试图让awk将du的输出从长字节字符串转换为更易读的数字,后缀为Mb和Kb。 (我知道你可以使用-h选项,但我想用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感到困惑? ba dum tshh

1 个答案:

答案 0 :(得分:7)

只是为了让它“正式”(作为答案)......

您正在使用**进行取幂。在awk中,^运算符用于取幂。我想在互联网上有很多参考文献,但我找到的是here