将数组的哈希打印为colums to file

时间:2017-04-12 16:27:41

标签: arrays perl hash printing

有没有办法将数组哈希打印到一个文件中,其中哈希的键是标题,而数组的值是标签(或其他任何)分隔的列?

我的最后一次尝试是这样的:

foreach my $key(sort keys %outHash){

    my $temp1 = join ("\n",@{$outHash{$key}});

    my $temp2 = $key."\n".$temp1;

    print OUTPUT "$temp2\t";
    print OUTPUT "\n";

}

这产生了可怕的输出。 任何帮助将不胜感激 ! 谢谢。

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

use feature qw(say);
use strict;
use warnings;

my %out_hash = (
    a => [1,2,3],
    b => [3,4,5],
);

my @keys = sort keys %out_hash;
say join "\t", @keys;
my $N = 3;
for my $i (0 .. ($N-1)) {
    my @row;
    for my $key (@keys) {
        push @row, $out_hash{$key}->[$i];
    }
    say join "\t", @row;
}

<强>输出

a   b
1   3
2   4
3   5

答案 1 :(得分:1)

如果我理解正确 - 你有一个数组哈希,你想要在列中打印。

要做到这一点:

#!/usr/bin/env perl

use strict;
use warnings;

my %test = (
   a => [ 1, 2, 3 ],
   b => [ 4, 5, 6, 7 ],
);

my @header = sort keys %test;

print join (",", @header), "\n";
while ( map {@$_} values %test ) {
   my @row;
   push( @row, shift @{ $test{$_} } // '' ) for @header;
   print join (",", @row ), "\n";
}

但是,您可能最好使用不同的数据结构,这样可以使您的数据按行进行组织,并使用散列切片逐行迭代。