RHEL 5.8에서 float
이것이 누락된 이유는 무엇입니까 ? awk
다른 기능으로 대체되었나요?
솔라리스의 경우:
echo "Foampile=123" | awk -F"=" '{ print float($2) "<->" $1 }'
반품
123<->Foampile
RHEL 5.8에서
awk: (FILENAME=- FNR=1) fatal: function `float' not defined
답변1
Solaris는 /usr/bin/awk
매우 오래된 awk이며 사용자 기능을 지원하지 않습니다. 따라서 해당 awk에서는 float(123)
or 변수(설정되지 않은 경우 비어 있음)와 의 값을 연결한 or와 동일 합니다 . 따라서 오류는 아니지만 아무 작업도 수행하지 않습니다.anything(123)
anything 123
float
anything
123
당신은 쓴 적이 있나요?
echo "Foampile=123" | awk -F '=' '{float="x"; print float($2) "<->" $1}'
너는 보게 될 것이다
x123<->Foampile
이 기능을 갖춘 awk 구현은 없다고 생각합니다 float
.
이 기능으로 무엇을 하길 원하시나요?
반면에 Solaris와 같은 최신 POSIX awk는 사용자 기능을 지원 /usr/xpg4/bin/awk
하므로 해당 기능에서는 nawk
또는 기능 을 정의하지 않으면 오류가 표시됩니다 .gawk
float
anything
echo "Foampile=123" | awk -F '=' '{ print $2 "<->" $1 }'
정확히 동일하게 작동하며 최신 awks에서도 작동합니다.
최신 awks에서는 함수 호출과 중괄호 안의 내용과 변수 연결을 명확하게 하려면 최소한 하나 이상의 추가 공백을 추가해야 합니다.
$ echo x | awk '{print foo ($1)}'
x
$ echo x | awk 'function foo(x) {return "y"}; {print foo($1)}'
y
답변2
나는 이것이 솔라리스 특유의 기능이라고 생각합니다. 대신 printf 또는 sprintf를 사용하고 부동 소수점 숫자를 지정해야 할 수도 있습니다.
awk 'BEGIN {printf "%1##f\n", "<->" $1}