如何计算一半的总内存四舍五入到下一个1G边界?

时间:2016-10-20 20:42:07

标签: bash awk

如何在Linux command for percentage of memory that is free中扩展答案,以便我可以将总内存四舍五入到下一个1G边界?例如,

# free -h
              total        used        free      shared  buff/cache   available
Mem:           7.4G        2.0G        3.0G        150M        2.4G        5.0G
Swap:            0B          0B          0B

我希望“free -h | awk {...}”的值为4,因为总Mem = 7.4G,所以7.4 / 2 = 3 + 1 = 4.有意义吗?

2 个答案:

答案 0 :(得分:3)

假设G中的所有内容,您需要:

free -h | awk 'NR==2{print(int(substr($2,1,length($2)-1)/2+.5))}'

<强>解释

要打印第二行,您需要

free -h | awk 'NR==2{print}'

要打印第二行的第二个字段,您需要

free -h | awk 'NR==2{print($2)}' # prints 7.7G

要删除最终的G,你需要从第1个字符开始并包含与字符串一样多的字符的子字符串,减去1。

free -h | awk 'NR==2{print(substr($2,1,length($2)-1))}' # prints 7.7

要获得一半,你需要

free -h | awk 'NR==2{print(substr($2,1,length($2)-1)/2)}' # prints 3.85

要舍入到最接近的整数,您需要添加0.5并截断小数部分(由int函数完成)

free -h | awk 'NR==2{print(int(substr($2,1,length($2)-1)/2+.5))}' # prints 4

答案 1 :(得分:0)

试试这个:

awk '$1=="MemTotal:"{t=$2}END{printf("%.0f GB\n", t/2/1024/1024)}' /proc/meminfo