首页 > 解决方案 > 使用 shell 脚本的文件中的总值,其中 gb、mb、kb、b 中的值

问题描述

我有一个文件,其中列中的值单位为 mb、kb、b 和 gb,我希望使用 shell 脚本对这些值进行总计,并且输出将以总计 gb 的形式出现

猫测试文件

24k
556m
1.2g
6.2m
17m
24k
254b
30g
1.6g
28k
120b

我能够将字节数据转换为 mb 但坚持转换 kb 和总和

test=0 
for i in `cat test_file` 
do 
b=echo $i|tr -d '[:alpha:]' 
a=echo $i|tr -d '/0-9,\./' 
if [ "$a" == "b" ]; then 
b=($b/1024) fi test=echo $test + $b | bc 
done 
result=$(echo "scale=2; $test / 1024" | bc) 
echo $result 

标签: linuxshellautomationsumdevops

解决方案


第一个解决方案:switch在 GNU 中使用awk

awk '
{
last_char=tolower(substr($0,length($0)))
switch(last_char){
  case "k":
    sum+=($0+0)/(1024*1024)
    break
  case "m":
    sum+=($0+0)/(1024)
    break
  case "g":
    sum+=$0+0
    break
  case "b":
    sum+=($0+0)/(1024*1024*1024)
    break
  case "?":
    print "Line is not matching anything here...."
}
}
END{
  print sum
}'  Input_file


第二种解决方案:您能否尝试以下方法,此解决方案正在使用if,else条件。

awk '
{
  if($0~/[kK]$/){
    sum+=($0+0)/(1024*1024)
  }
  if($0~/[mM]$/){
    sum+=($0+0)/(1024)
  }
  if($0~/[gG]$/){
    sum+=$0+0
  }
  if($0~/bB]$/){
    sum+=($0+0)/(1024*1024*1024)
  }
}
END{
  print sum
}
'  Input_file

推荐阅读