일부 숫자를 반올림하는 방법을 찾으려고 노력 중입니다.
내가 찾은 주제:https://stackoverflow.com/questions/2395284/round-a-divided-number-in-bash
Bash 스크립트에서 다음 명령을 사용하고 있습니다.
free -h | gawk '/Mem:/{print $2}' | awk 'FNR == 1 {print $1 "B"}')
다음 코드는 내가 설치한 총 메모리 양을 표시합니다. 현재 3.7GB를 사용하고 있습니다. 문제는 4GB로 반올림해야 한다는 것입니다.
내 컴퓨터에 많은 정보를 요청하고 그 정보를 모두 다시 표시하는 스크립트가 있습니다. (Prolly는 다른 것을 사용해야 하지만 이것이 제가 작업 중인 프로젝트 중 하나이기 때문에 아직 다른 것을 시도하지 않았습니다.
메모리=$(free -h | gawk '/Mem:/{print $2}' | awk 'FNR == 1 {print $1 "B"}')
$memory 에코
이제 아래 설명된 대로 3.7GB를 에코합니다. 다양한 방법을 시도했지만 4GB에 도달할 수 없는 것 같습니다.
답변1
다음을 수행할 수 있습니다.
memory=$(
LC_ALL=C free -h | awk '
/^Mem/ {
suffix = $2
sub(/[0-9.]*/, "", suffix)
printf "%.0f%sB\n", $2, suffix
}'
)
( 소수점 이하를 LC_ALL=C
사용하여 숫자를 인쇄해야 합니다 .
(쉼표를 소수점으로 사용하는 로케일에서는 3.7G가 3,7G로 출력됩니다)).
GNU/Linux 시스템에서는 다음을 수행할 수도 있습니다.
memory=$(
awk '/^MemTotal/{print $2*1024}' < /proc/meminfo |
numfmt --to=iec --format=%0f --suffix=B
)
또는:
memory=$(
free -h | awk '/^Mem/{print $2}' |
numfmt --from=iec --to=iec --format=%0f --suffix=B
)
(소수점 밑이 아닌 로케일을 처리하는 방법 .
)
/proc/meminfo의 이 필드 는 free
Linux에서 보고됩니다 . MemTotal
proc(5)에 따르면 이는 다음과 같습니다. 사용 가능한 총 RAM 양(예: 물리적 RAM에서 일부 예약된 비트 및 커널 바이너리 코드를 뺀 값). @StephenKit이 지적했듯이 물리적 RAM 및 PC의 경우 dmidecode
수퍼유저 권한이 필요하지만 BIOS에서 정보를 얻는 것이 더 나을 것입니다 .
physical_memory=$(
sudo dmidecode -t memory |
awk '$1 == "Size:" && $2 ~ /^[0-9]+$/ {print $2$3}' |
numfmt --from=iec --suffix=B |
awk '{total += $1}; END {print total}' |
numfmt --to=iec --suffix=B --format=%0f
)
답변2
$ echo "3.7" | awk '{printf("%d\n",$1 + 0.5)}'
4
답변3
소수점 이하 두 자리로 반올림하려는 경우 다음과 같은 몇 가지 간단한 예가 있습니다.
echo "12345.12345" | nawk '{printf ("%.2f\n", $1+0.005)}'
echo "12345.345" | nawk '{printf ("%.2f\n", $1+0.005)}'