我使用的是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
你试图使用''**作为指数?那不是'^'? – 2012-03-28 18:19:05
哎呀!你是对的!这解决了它。 – 2012-03-28 18:20:49
这些应该是GiB,MiB和KiB,因为您使用的是二进制千字节(2 ** 10)。为了进一步阐明你的代码,你可以通过'awk -f GiB = ...'或者'BEGIN'模块预先定义常量作为变量。 – 2012-03-28 22:08:36