摘要
用awk+三目运算实现不用单位的累加,
[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了。