Test.txt
tom
cat=0 bat=1 mat=0 pen=1
ironman122_bore.1
cat=8e-7 bat=8.001e-7 mat=5e-6 pen=200.001e-6
batmanbegin_nice.1
cat=10 bat=1 mat=0.25 pen=49.25
这是我的输入示例,我希望我的输出类似于 Out.txt
Out.txt
name cat bat mat pen
tom - 1 - -
ironman122_bore.1 8e-7 8.001e-7 5e-6 200.001e-6
batmanbegin_nice.1 10 1 0.25 49.25
这是我尝试过的
my $pr = "%-12s";
my @headers = qw/name cat bat mat pen/;
my %names;
while (<DATA>) {
chomp;
my $line = <DATA>;
%{$names{$_}} = split /=|\s+/, $line;
}
printf $pr x @headers . "\n", @headers;
for (keys %names) {
my @ds = ($_);
for my $k (@headers[1..$#headers]) {
my $v = $names{$_}->{$k};
push @ds, $v ? $v : '-';
}
printf $pr x @ds . "\n", @ds;
}
但我得到一个输出
name cat bat mat pen
tom - 1 - -
ironman122_bore.1 8e-7 8.001e-7 5e-6 200.001e-6
batmanbegin_nice.1 10 1 0.25 49.25
如何修改代码以获得 Out.txt 中所示的对齐输出?当我使用与我作为输入给出的数据相似的实际数据时,我无法达到我的预期。
编辑:示例输入已与预期结果一起更改