经常会有需求,总计一些不同单位,要求其总和或者平均值。 比如下面的文本数据:
1000
2.1k
3.2K
12.48Kb
1.44M
2.56mB
1.1GB
字节数据,里面有K,M,G,有大小写,而且后面还可能有b或者B,这个时候要求其和,这个时候就要写个小脚本来处理。下面是处理脚本.
#!/bin/bash
total=0
while read LINE
do
var=$(echo $LINE | tr -d '[0-9.]') # 获取除0-9数字和.外的字符
num=$(echo $LINE | tr -cd '[0-9.]') # 仅需0-9和.
case $var in
[Kk]*) total=$(echo "$total + $num * 1024" | bc) ;; # 匹配k,K
[Mm]*) total=$(echo "$total + $num * 1024 * 1024" | bc) ;; # 匹配m,M
[Gg]*) total=$(echo "$total + $num * 1024 * 1024 * 1024" | bc) ;;# 匹配g,G
*) total=$(echo "$total + $num" | bc) ;; # 浮点型和整数通过bc来计算
esac
done < cat DataFile
echo "total = $total"