2012-03-28 5 views
1

내가 데비안 6을 사용하고 있는데 GNU는 mb 및 이하와 같은 접미사보다 사람이 읽을 수 바이트의 긴 문자열에서 du의 출력을 변환 AWK를 얻기 위해 노력하고, 나오지도. (난 당신이 -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 실행을하면

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 wardly 혼란 그만 위해 무엇을 할 수 있는가?

+2

당신은 지수로'**'사용하려고합니까? 그것은'^'아닌가요? –

+0

Ooops! 네가 옳아! 그것은 그것을 고쳤다. 이진 킬로바이트 (** 10 2)를 사용하는 것처럼 –

+1

그리고 사람들은, 지브, MiB 크기 및 킬로바이트해야합니다. 코드를 더 명확히하기 위해 상수를'awk -f GiB = ...'또는'BEGIN' 블록을 통해 변수로 미리 정의 할 수 있습니다. –

답변

7

그냥 (대답으로) "공식"을 만들 수 TSHH 바 둠 ... 당신은 지수에 대한 ** 사용하고

. awk에서 ^ 지수 연산자 사용된다. 나는 인터넷에 많은 참고 자료가 있다고 상상하지만, 내가 발견 한 것은 here이다.

+1

'^'와'**'모두 GNU awk (gawk)에서 작동합니다. –

+1

데비안의 기본 awk는'mawk'입니다. – Kaz