使用PERL将KB,MB,GB,TB转换为KB

时间:2018-07-11 10:58:21

标签: perl

我的磁盘大小如下所示。

323.2T, 123.23G, 1.011T, 2.42M.

如何在Perl中将所有这些转换为KB

2 个答案:

答案 0 :(得分:3)

我将为每个因子构建一个乘数哈希,并在正则表达式替换中使用它

以下内容以千字节的1的倍数开头,并将其乘以1024 == 2 10 。如果您愿意的话,可以将1024更改为1000 == 10 3

替换仅查找数字和小数点的序列,后跟一个合格的因子字母之一,进行乘法运算并将其替换为K

use strict;
use warnings 'all';
use feature 'say';

my %factors;
{
    my $f = 1;

    for my $c ( qw/ K M G T P E / ) {
        $factors{$c} = $f;
        $f *= 1024;
    }
}

my $s = '323.2T, 123.23G, 1.011T, 2.42M';

$s =~ s/([\d.]+)([KMGTPE])/$1 * $factors{$2} . 'K'/eg;

say $s;

输出

347033357516.8K, 129216020.48K, 1085552984.064K, 2478.08K

答案 1 :(得分:-2)

KB,MB,GB和TB表示千字节,兆字节,千兆字节和TB,这表示千字节的基数为10µ³或1000。

以下代码将执行此操作。我正在使用CentOS,而shebang是perl在系统上的位置。您必须将其更改为系统上的位置,也可以仅通过perl file.pl从命令行运行它。

#!/usr/bin/perl

use strict;
use warnings;

my $s1 = 323.2  * 1000 * 1000 * 1000; # 323.2TB
my $s2 = 123.23 * 1000 * 1000;        # 123.23GB
my $s3 = 1.011  * 1000 * 1000 * 1000; # 1.011TB
my $s4 = 2.42   * 1000;               # 2.42MB


print "323.2 terabytes is $s1 kilobytes\n";
print "123.23 gigabytes is $s2 kilobytes\n";
print "1.011 terabytes is $s3 kilobytes\n";
print "2.42 megabytes is $s4 kilobytes\n";

输出:

323.2 terabytes is 323200000000 kilobytes
123.23 gigabytes is 123230000 kilobytes
1.011 terabytes is 1011000000 kilobytes
2.42 megabytes is 2420 kilobytes

我将输出更改为指定兆字节,千兆字节,兆字节和千字节,以使其看起来更整洁并避免出现无法识别的转义\ K错误。代码仍然可以那样工作,但这只是将其清理干净。

如果您需要千字节,兆字节,千兆字节和tebibyte,则需要除以1024,而不是1000。