Linux之awk实现不同单位行的累加计算

摘要

用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了。

Linux之awk实现不同单位行的累加计算

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

lookback

目前评论:1   其中:访客  1   博主  0

  1. avatar xiaoyutou 2
评论加载中...

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: