我是Perl的新手,并试图找出实现它的最佳方法,但目前还不确定语法。
我现在的脚本是从HDFS读取文件,其中包含许多可能性中的键值对。
例如,假设我的键可以是A,B,C,D,E
我正在阅读的文件将换行符分隔为:
A,50
C,30
在我的脚本中,我想读取文件并将变量分配给相应的值,如果不存在任何变量,我想将它们分配给零值。
因此,在脚本结束时,我想要一个输出打印如下:
A=50,B=0,C=30,D=0,E=0
由于我对Perl的了解有限,我想知道如何建立最好的循环来收集这样的信息?我有读取文件的功能,但没有将指标收集到某种Array或Hash分组中。
答案 0 :(得分:1)
use strict;
use warnings;
my @keys = qw(A B C D E);
open my $fh, '<', $filename_from_hdfs
or die "$!";
my %mapping;
while ( my $line = readline($fh) ) {
chomp($line);
my ($key, $value) = split /,/, $line;
$mapping{$key} = $value;
}
# zero out keys with no value
$mapping{$_} //= 0 foreach @keys;
print join(',', map { "$_=$mapping{$_}" } sort keys %mapping), "\n";
答案 1 :(得分:1)
my %result;
#assign zero to all keys
for my $key ('A' .. 'E')
{
$result{$key} = 0;
}
#open file, read each line one by one
#Split each read line from file in ($key, $value).
result{$key} = $value;
#After finishing reading the file, traverse %result and output key, values