我有一个包含以下内容的文件:
A 1 A 2 B 3 B 4 B 5 B 6 C 7 A 8
我想在第一列中获取所有唯一键,但是获取该唯一键的所有相应值,即我需要获取:
A 1,2,8 B 3,4,5,6 C 7
最好的方法是什么?
(我听说Perl有很好的支持来解决这个问题,但我是Perl的新手。)
答案 0 :(得分:8)
试试这个:
open my $fh, '<', "data_filename";
my %map;
while(my $line = <$fh>) {
my ($key, $val) = split(/\s+/, $line);
push @{$map{$key}}, $val;
}
答案 1 :(得分:3)
您可能需要散列,其中散列中的每个值都是数组reference。
my %values;
while (<>) {
my ($left, $right) = split(/ /,$_,2);
my $array = $values{$left};
if (!$array) {
$array = [];
$values{$left} = $array;
}
push(@{$array},$right);
}
您可以使用Data::Dumper验证这是否产生了正确的数据结构:
use Data::Dumper;
print Dumper(\%values);
答案 2 :(得分:0)
为了完整起见,这只是另一种可能的解决方案。在这种情况下,哈希存储密钥和包含您的值的字符串。
use warnings;
use strict;
my %hash = ();
open (FILE, "input.txt") or die "";
while(FILE>){
chomp;
(my $key, my $value) = split;
$value = ",".$value if exists $hash{$key};
$hash{$key}.= $value;
}
foreach my $key (sort keys %hash){
print "$key $hash{$key}\n";
}
与往常一样,实现目标的方法不止一种。