- 求职 : 软件工程师
- 论坛徽章:
- 3
|
- #!perl
- use 5.016;
- # 这个模块是为了把多个外置文本放在一个文件中
- use Inline::Files;
- use List::Util qw(reduce sum);
- # 用内嵌文本是为了演示,实际中请使用外置文本
- # my @table_one = read_file $file;
- # 并加载 File::Slurp 模块
- my $table_one = table_array(<TABLEONE>);
- my $table_two = table_array(<TABLETWO>);
- foreach my $line (@$table_two) {
- my $item = $line->[0];
- my $from = $line->[2];
- my $to = $line->[3];
- my ($xxx, $yyy) = filter_data($table_one, $item, $from, $to);
- say "$item $line->[1] $xxx $yyy";
- }
- sub filter_data {
- my ($data, $item, $from, $to) = @_;
- my @result;
- foreach my $line (@$data) {
- next unless $line->[0] eq $item;
- if ( +$line->[1] >= $from and +$line->[1] <= $to ) {
- # say $line->[2];
- push @result, $line->[2];
- }
- }
- my $xxx = scalar @result;
- # my $yyy = reduce { $a + $b } @result;
- my $yyy = sum @result;
- return ($xxx, $yyy);
- }
- sub table_array {
- my @table = @_;
- my @array;
- foreach my $line (@table) {
- next if $line =~ /^$/;
- push @array, [ split(/\s+/, $line) ];
- }
- return [ @array ];
- }
- __TABLEONE__
- chr1 53662616 513
- chr1 53662617 524
- chr1 53662618 526
- chr1 53662619 530
- chr1 53662620 530
- chr1 53662621 530
- chr1 53662622 511
- chr3 48895204 3550
- chr3 48896063 598
- chr3 48896633 1521
- chr3 48897059 3438
- chr3 48900091 4553
- __TABLETWO__
- chr1 CPT2 53662616 53679267
- chr2 ACADL 211053685 211089987
- chr3 SLC25 48895143 48936227
- chr3 ACAD9 128598535 128631450
复制代码 output:- chr1 CPT2 7 3664
- chr2 ACADL 0
- chr3 SLC25 5 13660
- chr3 ACAD9 0
复制代码 |
|