linux - 在 Perl 中将内存大小(人类可读)转换为实际数字(字节)

标签 linux perl unix

CPAN 中是否有实际的包来转换这样的字符串:

my $string = "54.4M"
my $string2 = "3.2G"

以字节为单位的实际数字:

54,400,000
3,200,000,000

反之亦然。

原则上我最后要做的是求和所有内存大小。

最佳答案

要获得您要求的精确输出,请使用Number::FormatEngNumber::Format :

use strict;
use warnings;

use Number::FormatEng qw(:all);
use Number::Format qw(:subs);

my $string = "54.4M" ;
my $string2 = "3.2G" ;

print format_number(unformat_pref($string))  , "\n";
print format_number(unformat_pref($string2)) , "\n";

__END__
54,400,000
3,200,000,000             

顺便说一句,如果您要对结果进行计算,则只需要 unformat_pref

Number::FormatEng用于工程符号转换(不用于字节),其前缀区分大小写。如果要将它用于千字节,则必须使用小写 k

Number::Format会将这些字符串转换为实际字节(有点,差不多)。

use Number::Format qw(:subs);

my $string = "54.4M" ;
my $string2 = "3.2G" ;

print round(unformat_number($string) , 0), "\n";
print round(unformat_number($string2), 0), "\n";

__END__
57042534
3435973837

我说“有点,差不多”的原因是 Number::Format1K 视为等于 1024 字节,而不是 1000 字节。这可能就是为什么它会给出一个看起来很奇怪的结果(带有小数字节),除非它是四舍五入的。

关于linux - 在 Perl 中将内存大小(人类可读)转换为实际数字(字节),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2557649/

相关文章:

linux - 为 0 或 4(不是 1、2、3)指定匹配重复

linux - 每次/bin/sh 被调用时你能运行一个脚本吗?

linux - 在 html 文件上运行 linux 应用程序

perl - while 循环与 perl 中单次使用菱形运算符的区别

perl 主程序永远等待

linux - 寻找删除当前行和前后一行并替换当前行的方法

linux - 如果文件路径包含通配符 (*),则创建或复制文件将不起作用

linux - 无需交互的 Bash 脚本

regex - 在 perl 中为日志输出(stdout)着色

linux - 用于文件夹中所有文件中 token 替换的 shell 脚本