[root@Legion80 ~]# cat 123 75955M 13232K 17492K 75953M 75963M 2G 10G 5T [root@Legion80 ~]# awk '{a+=/T/?$0*1024:(/M/?$0/1024:(/K/?$0/(1024^2):$0))}END{print a"G"}' 123 5354.56G [root@Legion80 ~]# awk '{a+=/G/?$0/1024:(/M/?$0/(1024^2):(/K/?$0/(1024^3):$0))}END{print a"T"}' 123 5.22906T [root@Legion80 ~]# awk '{a+=/T/?$0*(1024^2):(/G/?$0*1024:(/K/?$0/1024:$0))}END{print a"M"}' 123 5.48307e+06M [root@Legion80 ~]# awk '{a+=/T/?$0*(1024^2):(/G/?$0*1024:(/K/?$0/1024:$0))}END{printf"%.fM\n",a}' 123 5483069M [root@Legion80 ~]#
这里有4中单位K、M、G、T,如果要做统计,直接做数字累加肯定不行了,awk可以用三目和if的语法来实现,这是一大神给出的三目法
命令解释:awk '{a+=/T/?$0*1024:(/M/?$0/1024:(/K/?$0/(1024^2):$0))}END{print a"G"}'
{a+=/T/?$0*1024:(/M/?$0/1024:(/K/?$0/(1024^2):$0))}
/K/?$0/(1024^2):$0
/M/?$0/1024:(/K/?$0/(1024^2):$0)
/T/?$0*1024:(/M/?$0/1024:(/K/?$0/(1024^2):$0))
不知道这样一分拆,是不是就好理解了
/K/?$0/(1024^2):$0实现K单位到G单位的换算,要是单位为K就把值除以1024的平方
/M/?$0/1024:(/K/?$0/(1024^2):$0)实现了M单位到G单位的换算,如果单位是M就把值除以1024
/T/?$0*1024:(/M/?$0/1024:(/K/?$0/(1024^2):$0))实现了T单位到G单位的换算,如果单位是T就把值乘以1024,
这样就把每行不同单位的值都转换成了G单位的值了,最后所数值累加,就Ok了。
2015年9月10日 上午11:05 1F
增加一个计算K的
awk ‘{a+=/T/?$0*(1024^3):(/G/?$0*(1024^2):(/M/?$0*1024:$0))}END{printf”%.fKn”,a}’ 123