perl数据结构的应用

最简单的数据结构的应用,把相同id的行合并,涉及引用等知识:

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

my %hash;
open FA, $ARGV[0] || die $!;
while (<FA>)
{
	chomp;
	my @tmp = split;
	my $string = "$tmp[1]\t$tmp[2]\t$tmp[3]\t$tmp[4]\t$tmp[5]";
	push @{$hash{$tmp[0]}}, $string;
}
close FA;

foreach my $id (sort {$a cmp $b} keys %hash)
{
	if (@{$hash{$id}} == 1)
	{
		print "$id\t$hash{$id}[0]\n";
	}else{
		my ($ref, $sum);
		my (@colsum, @set);
		for(my $i = 0; $i < @{$hash{$id}}; $i ++)
		{
			@set = split /\s/, $hash{$id}[$i];
			for(my $j = 0; $j < @set; $j ++)
			{
				$ref->[$i][$j] = $set[$j];
			}
		}
		for(my $j = 0; $j < @{$ref->[0]}; $j ++)
		{
			for(my $i = 0; $i < @{$ref}; $i ++)
			{
				$sum += $ref->[$i][$j];
			}
			push @colsum, $sum;
		}
		print join "\t", $id, @colsum, "\n";
	}
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值