如何格式化打印计数的输出

时间:2015-03-13 08:17:52

标签: arrays perl printing count format

以下代码给出了

的结果
Female4946Male5054gender1

如何在元素及其数字之间添加空格,为什么打印数组旁边的数字为1?

#!/usr/bin/perl

use strict;
use warnings;

my @gender;
my $female=0;

while (<>) {
    chomp;
    my @fields = split /,/;
    push @gender, $fields[5];
}

my %count;
$count{$_}++ for @gender;
print %count;

3 个答案:

答案 0 :(得分:2)

您正在打印数组,而不是打印哈希。使用循环打印它(您可以将其隐藏到map)。另外,当你可以直接创建哈希时,为什么要填充@gender数组呢?

#!/usr/bin/perl
use strict;
use warnings;

my %count;

while (<>) {
    chomp;
    my @fields = split /,/;
    $count{ $fields[5] }++;
}

for my $gender (keys %count) {
    print $gender, ' ', $count{$gender}, "\n";
}

最后的1来自第六列哈希gender的一行(标题可能是?)您可以在打印之前delete $count{gender},或添加{{1}在while循环之前跳过标题。

答案 1 :(得分:1)

你需要的只是

print join(' ', %count), "\n"

<强>输出

Female 4946 Male 5054 gender 1

答案 2 :(得分:0)

您的输入文件中可能有一个标题行,其中包含gender作为列标题,并且可以读取并计算一次。通过从文件句柄读取一行到第一行来跳过第一行。

<>;

要在每对之间插入一个空格(但不是在最后一对之后!),请使用joinmap的代码块将为每对构建字符串:

print join " ", map {"$_: " . $count{$_} } keys %count;
print "\n";

或者更好(从我的角度来看)与他们之间的新行:

while( my ($gender => $count) = each %count) {
    print "$gender: $count\n";
}