linux - 使用 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
解决方案
第一个解决方案: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
推荐阅读
- redis - Redis递增数值-ERR值不是整数或超出范围
- nativescript - 使用 Nativescript Angular 共享文件
- java - Java方法返回不同类型数组的随机元素
- linux - conda install -c anaconda 无法通过 anaconda 安装任何软件包
- ios - MacOS VPN 错误没有提供共享密钥 Objective-C
- visual-studio - 如何在最新的 cppwinrt 中 co_await GetFilesAsync?
- python - Flask-CQLAlchemy DB 对象没有“查询”属性
- javascript - 自定义指令将子文本推送到数组中
- java - 泛型类型如何为 getter 和 setter 工作?
- java - StanfordNLP 分类器内存不足错误