我正在尝试找到一种方法来四舍五入一些数字。
我找到的主题:https://stackoverflow.com/questions/2395284/round-a-divided-number-in-bash
我在 bash 脚本中使用以下命令..
自由-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"}')
回显$内存
现在它回显了 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
)
(处理小数基数不是的区域设置的方法.
)。
请注意,free
在 Linux 上会报告MemTotal
/proc/meminfo 的该字段。根据 proc(5),这就是 可用 RAM 总量(即物理 RAM 减去一些保留位和内核二进制代码)。对于物理 RAM 和 PC,正如 @StephenKit 所指出的,您可能最好使用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)}'