我有一个包含以下数据的输入文件:
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实现这一点?
答案 0 :(得分:0)
想法是将您的数据存储在hash中,使用 xinst 名称作为键,将arrayref其他值作为值。
如果你想要数组中的唯一值,你应该使用另一个哈希,使用实际值作为哈希键,并使用1
或undef
作为哈希值(因为它们在这个特定的情况下无关紧要)情况)。
如果您需要实际代码的帮助,则应提供实际代码,而不仅仅是问题。
答案 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;