2011-04-27 4 views
14

awk에서 문자열을 int로 캐스트하는 메소드를 찾고있다. 나는 문자열 비교awk의 int로 캐스트하기

일을 할 나타납니다 다음이 (메모를 : 필드에 $ (5) 두 가지 형식 중 하나의 비율이 80 % 또는 9.0 %) 그래서

awk '{if (substr($5,1,(length($5)-1)) >= 90) ...

나는 그것을 변경할 때 : 내가 의도 한대로

awk '{if (substr($5,1,(length($5)-1))+0 >= 90+0) ...

그것은 비교합니다. 이것은 적절한 캐스트입니까? 캐스트를 수행하는 '더 좋은'방법이 있습니까?

+0

+0, 왜 $ 5 + 0이 아니거나 작동하지 않습니까? – HattrickNZ

답변

13

+0을 사용해도됩니다. 변수 v이 백분율 값이라고 말하십시오.

$ awk -v v="80.1%" 'BEGIN{print v+0.1}' 
80.2 

% 기호를 제거 할 필요는 없습니다.

15

대부분의 새 awks에는 int() 함수가 있습니다.

그러나 'Awk Programming Language'에 설명 된 캐스팅 방법은 numericValue 및 +0을 사용하여 수행됩니다. 나는 책을 가지고 있지 않지만, +0.0을 사용하여 float 값으로 캐스팅 할 수도 있다고 생각합니다.

이 정보가 도움이되기를 바랍니다.

0

the docs에 따르면 int(x)은 POSIX 호환입니다. 숫자는 여전히 float (awk의 모든 숫자는 부동 소수점이므로)이지만 int로 잘립니다.


0을 추가해도 문자열이 int로 변환되지 않습니다. 그것을 float로 변환합니다.

당신은 브라이언 커니 핸으로 The One True AWK에 따라 오래된 awk이 같은 macOS awk 또는 FreeBSD awk로, 당신은 맨 하단에 this를 볼 수있는 경우로 취급하는 식을 강제로

BUGS 
    There are no explicit conversions between numbers and strings. To force 
    an expression to be treated as a number add 0 to it; to force it to be 
    treated as a string concatenate "" to it. 

    The scope rules for variables in functions are a botch; the syntax is 
    worse. 

당신이 수레 신경 쓰지 않으면 숫자가


에 0을 추가하고 당신은 gawk이 당신은 또한 strtonum


다른 소스를 사용할 수 있습니다 awk

OS X version of AWK, which is derived from "The One True AWK” by Brian Kernighan

모든 숫자를 부동 소수점 :

Search "All arithmetic shall follow the semantics of floating-point arithmetic as specified by the ISO C standard"

Search "all numbers in awk are floating"