2015-05-09 32 views
-4

相同的陣列我有了這些下面的數據的輸入文件:結合使用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實現這個?

+1

您的Perl腳本在哪裏? – serenesat

+0

我的代碼很長,我問的問題只是該長文本的一部分,但如果您想查看它,我可以提供給您 – Meeyaw

+0

Stack Overflow是一個關於程序員幫助程序員解決問題並整理信息的網站,作爲結果。它有助於大量,如果你顯示一些願意通過表明你的嘗試到目前爲止 – Sobrique

回答

0

想法是存儲在一個hash您的數據,使用XINST名作爲關鍵字和其他價值觀爲價值arrayref

如果您想在數組中使用唯一值,則應該使用另一個散列值,將實際值用作散列鍵,並使用1undef作爲散列值(因爲它們在此特定情況下無關緊要)。

如果您需要實際的代碼幫助,您應該提供實際的代碼,而不僅僅是一個問題。

+0

我的實際代碼很長,不使用散列,但我可以編輯提供給你。 – Meeyaw

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; 
+0

這一個只打印列表的最後兩個。但是,感謝這個想法,因爲我是這個哈希的新手,所以我必須更多地關注哈希 – Meeyaw