我有一个看起来像这样的文件.
a_8_3_1-b_30_5_6-c_6_2_1- + b_30_5_6-
a_123_1_1- + d_144_1_7-
a_123_1_1- + c_1_4_1-
b_50_1_1- + d_144_1_7-
a_123_1_1- + c_2_1_2-
c_1_4_1- + a_123_1_1-
a_123_1_1- + a_93_1_2-
d_144_1_7- + a_123_1_1-
c_2_1_2- + a_123_1_1-
a_123_1_1- + c_2_1_2-
Run Code Online (Sandbox Code Playgroud)
它有2列,用"+"符号分隔.我需要计算此文件中存在的唯一组合的数量.
如图所示,形成组合,例如在a_123_1_1-和c_2_1_2-之间,以及在c_2_1_2- + a_123_1_1-之间.现在我需要数不了.在这样的文件中出现这种对的情况,我知道这种组合(不论它们的相对顺序)发生了3次.
与a_123_1_1-和d_144_1_7-类似.它们以两种组合出现.每个组合出现一次.因此,累计计数= 2
我现在已经尝试将所有这些行放在哈希中(即每一行都是一个键,它的出现将是它的相应值)并打印出no.在PERL中使用map函数的出现次数.
但是,我如何包含这样的冗余并在各个元素之间解决这个问题?
请帮忙.
与处理perl时一样,有多种方法可以做到,但你可以:
如下例所示:
use warnings;
use strict;
use Data::Dumper;
my %count;
for (<DATA>) { chomp;
my $str_pair = join ':', sort split / \+ /;
$count{$str_pair}++;
}
print STDERR Dumper \%count;
__DATA__
a_8_3_1-b_30_5_6-c_6_2_1- + b_30_5_6-
a_123_1_1- + d_144_1_7-
a_123_1_1- + c_1_4_1-
b_50_1_1- + d_144_1_7-
a_123_1_1- + c_2_1_2-
c_1_4_1- + a_123_1_1-
a_123_1_1- + a_93_1_2-
d_144_1_7- + a_123_1_1-
c_2_1_2- + a_123_1_1-
a_123_1_1- + c_2_1_2-
Run Code Online (Sandbox Code Playgroud)
产量
$VAR1 = {
'a_8_3_1-b_30_5_6-c_6_2_1-:b_30_5_6-' => 1,
'a_123_1_1-:c_2_1_2-' => 3,
'a_123_1_1-:c_1_4_1-' => 2,
'a_123_1_1-:a_93_1_2-' => 1,
'b_50_1_1-:d_144_1_7-' => 1,
'a_123_1_1-:d_144_1_7-' => 2
};
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
160 次 |
最近记录: |