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 に示されているように、整列された出力を取得するようにコードを変更するにはどうすればよいですか? 入力として与えたものと似た実際のデータを使用したときに、期待したことを達成できませんでした。
編集:サンプル入力は、期待される結果とともに変更されました