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