Perl,如何将重复标识符和重叠值的数据合并到散列中

前端之家收集整理的这篇文章主要介绍了Perl,如何将重复标识符和重叠值的数据合并到散列中前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想知道你是否可以帮我解决一个我无法理解的编码问题.我看到的制表符分隔的数据类似于以下内容

00001  AU:137  AU:150  AU:180
00001  AU:137  AU:170
00002  AU:180
00003  AU:147  AU:155
00003  AU:155

我想要的输出是:

00001  AU:137  AU:150  AU:180  AU:170
00002  AU:180
00003  AU:147  AU:155

因此第一列(标识符)将合并值,删除重复项,以便它成为哈希.我不确定如何使用我当前的数据,因为它不能是具有重复键的哈希.如果标识符相同,我也不确定如何将数据推送到数组中.

我为没有代码而道歉.实际上,我确实尝试了很多,但他们看起来甚至不像我这样的新手.

任何帮助,建议将不胜感激,非常感谢您的时间和答案.我非常感谢.

解决方法

脚本:

#!/usr/bin/perl

use strict;
use warnings;

my %hash;
sub uniq { return keys %{{map {$_=>1} @_}}; }

open my $fh,'<input.txt' or die $!;
foreach (<$fh>) {
  $hash{$1} .= $2 if /^(\S+)(\s.*?)[\n\r]*$/;
}
close $fh;

foreach (sort keys %hash) {
  my @elements = uniq split /\t/,$hash{$_};
  print "$_\t",join(' ',sort @elements),"\n";
}

输出

00001    AU:137 AU:150 AU:170 AU:180
00002    AU:180
00003    AU:147 AU:155

猜你在找的Perl相关文章