2012-03-28 36 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