bash – 方便解析带有单位后缀的数字?

假设您拥有人类可读格式的数据,例如du -h的输出,并希望进一步对这些数字进行操作.假设您希望通过grep管理数据,以对该数据的子集进行求和.您可以在以前从未见过的许多系统上临时执行此操作,并且只使用最少的实用程序.您需要所有标准10 ^ n后缀的后缀转换.

是否存在gnu-linux实用程序将后缀数字转换为管道中的实数?你有一个bash函数来做这个,或者一些可能容易记住的perl,而不是一段正则表达式替换或几个sed步骤?

38M     /var/crazyface/courses/200909-90147
2.7M    /var/crazyface/courses/200909-90157
1.1M    /var/crazyface/courses/200909-90159
385M    /var/crazyface/courses/200909-90161
1.3M    /var/crazyface/courses/200909-90169
376M    /var/crazyface/courses/200907-90171
8.0K    /var/crazyface/courses/200907-90173
668K    /var/crazyface/courses/200907-90175
564M    /var/crazyface/courses/200907-90178
4.0K    /var/crazyface/courses/200907-90179

| grep 200907 | <惊人的后缀转换> | awk'{s = $1} END {print s}’

相关参考文献:

> How can I sort du -h output by size
> https://stackoverflow.com/questions/2557649/convert-memory-size-human-readable-into-actual-number-bytes-in-perl

基于我在以下一个问题上的回答:
awk '{
    ex = index("KMGTPEZY",substr($1,length($1)))
    val = substr($1,length($1) - 1)

    prod = val * 10^(ex * 3)

    sum += prod
}
END {print sum}'

使用的另一种方法:

sed 's/G/ * 1000 M/;s/M/ * 1000 K/;s/K/ * 1000/; s/$/ +\\/; $a0' | bc

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...