使用Perl组合相同的数组

时间:2015-05-09 18:50:41

标签: arrays string perl

我有一个包含以下数据的输入文件:

input.txt中

xinstA portA out ctl vcc vss box_cell
xinstB in portB ctl vcc vss box_cell
xinstA in out portA%1 vcc vss box_cell
xinstB porB%1 out ctl vcc vss box_cell
xinstA in out mc1_ctl vcc vss box_cell
...
... may have xinstC, xinstD and so forth
...

我想要的输出是这样的:

xinstA portA out portA%1 mc1_ctl vcc vss box_cell
xinstB portB%1 portB ctl vcc vss box_cell
...
... can have xinstC, xinstD and so forth.
...

我想合并具有相同前缀xinst名称的行。 如何使用Perl实现这一点?

2 个答案:

答案 0 :(得分:0)

想法是将您的数据存储在hash中,使用 xinst 名称作为键,将arrayref其他值作为值。

如果你想要数组中的唯一值,你应该使用另一个哈希,使用实际值作为哈希键,并使用1undef作为哈希值(因为它们在这个特定的情况下无关紧要)情况)。

如果您需要实际代码的帮助,则应提供实际代码,而不仅仅是问题。

答案 1 :(得分:0)

诀窍是使用哈希。哈希只能将唯一标量作为键,您可以利用这些标记:

use warnings;
use strict;

open my $in, '<', 'in.txt' or die $!;

my %data;
while(<$in>){
    chomp;
    my @split = split(/\s+/);
    $data{$split[0]} = $_;
}

print "$data{$_}\n" foreach sort keys %data;