假设您拥有人类可读格式的数据,例如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