我的磁盘大小如下所示。
323.2T, 123.23G, 1.011T, 2.42M.
如何在Perl中将所有这些转换为KB
答案 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。