2.13464e+07과 같은 숫자를 피하기 위한 HPUX 큰 숫자 변환

2.13464e+07과 같은 숫자를 피하기 위한 HPUX 큰 숫자 변환

hpux에서 킬로바이트를 얻으려면 21858717696을 1024로 나누어야 하지만 다음 명령을 사용하면 작동하지 않습니다.

echo 21858717696 | awk '{print $1/1024}'

산출:

2.13464e+07

AIX에서는 다음 명령을 사용할 수 있으며 작동합니다.

echo 21858717696 | awk '{print $1/1024}' | bc -l | awk '{printf("%.0f\n", $1)}'

산출:

21346404

AIX 방법은 HPUX에서 작동하지 않습니다. HPUX에서 동일한 결과를 얻으려면 어떻게 해야 합니까?

답변1

HP-UX에는 Perl이 있어야 합니다.

echo 21858717696|perl -ne 'printf "%.0f\n",$_/1024'
21346404

답변2

이것이 제가하는 것입니다dc <<< "21858717696 1024/ p"

  • dc거의 모든 유닉스에 기본적으로 설치되어 있다고 생각합니다 . 1991년부터 제가 사용했던 모든 것이 들어있습니다.
  • 나는 과정이다.
  • 정확하고 정밀한 결과를 제공합니다.

쉘이 이 작업을 수행하지 않으면 <<<다음을 수행하십시오.

echo "21858717696 1024/ p" | dc

답변3

이미 다음을 사용하고 있으므로 bc:

$ printf '%s/1024\n' 21858717696 | bc
21346404

또는

$ echo '21858717696/1024' | bc
21346404

bc또는 계산을 수행 할 수 있는 다른 조합입니다 . scale원하는 소수 자릿수(기본적으로 0)를 설정하려면 다음 할당을 포함하세요.

$ printf '%s\n' 'scale=4' '21858717696/1024' | bc
21346404.0000

가장 중요한 것은 bc실제 계산을 수행하는 것입니다.

답변4

왜 awk의 결과를 인쇄하지 않습니까? 두 번째 awk가 필요하지 않습니다.

$ echo 21858717696 | awk '{printf "%.0f\n", $1/1024}'
21346404

제가 빠진 것이 없다면 이것은 두 번째 명령과 정확히 동일합니다.

$ echo 21858717696 | awk '{print $1/1024}' | bc -l | awk '{printf("%.0f\n", $1)}'
21346404

내 Linux 시스템에서는 더 큰 숫자와 busybox awk를 통해서만 이것을 재현할 수 있습니다.

$ echo 12321858717696000000000 | ./awk '{print $1/1024}'
1.20331e+19

그러나 busybox awk를 사용해도 printf예상대로 작동합니다.

$ echo 12321858717696000000000 | ./awk '{printf "%.0f\n",$1/1024}'
12033065153999998976

관련 정보