linux 累加程序语法,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了。

572be46e9f5e6c5fb6a1e2a933b06c19.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值