2013-03-10 54 views
1

你好,我正在試圖做一個perl腳本,將需要2個文件(包含單詞),並加入他們爲每個可能的組合。試圖輸出兩個文件的所有可能的組合

例如。

文件1包含:

make 
    move 

文件2包含:

on 
    out 

輸出文件應閱讀:

makeon 
    makeout 
    moveon 
    moveout 

理想情況下它會是不錯的訂單文件顛倒IE

onmove outmove onmake outmake

以下幾件事情我已經試過,但我是個初學者,從來沒有得到正確的輸出

! /usr/bin/perl 



open (OUT, '> output.txt'); 

use strict; 

use warnings; 

use Data::Dump qw(dump); 

my @in = qw(aaa bbb ccc ddd); 

my @list; 

while(my $first = shift @in) { 

     last unless @in; 
     my $rest = join'\n', @in; 
     push @list, glob("{$first}{$rest}"); 
} 
     dump @list; 




# Some other attempts 


my @karray; 

my @sarray; 

my @testarr = (@sarray)[email protected]; 

my $stemplate = "test1.txt"; 

my $ktemplate = "test2.txt"; 

my $outtemplate = "output.txt"; 

sub pushf2a { 

    open(IN, "<$_[0]") || die; 

    while (<IN>) { 

    if ($_[0] eq $stemplate) { 

     push (@sarray,@karray,$_); 

    } else { 

     push (@karray,@sarray,$_); 
    } 

    } 

    close(IN) || die $!; 

} 

&pushf2a($stemplate, @sarray); 

&pushf2a($ktemplate, @karray); 

print OUT @sarray, @karray; 

print OUT @list; 

close (OUT); 

回答

0

可能有雨衣辦法做到這一點,但這很簡單:

#!/usr/bin/env perl 
use Tie::File; 
use strict; 
use warnings; 

tie my @a, 'Tie::File', $ARGV[0] or die "$ARGV[0]: $!\n"; 
tie my @b, 'Tie::File', $ARGV[1] or die "$ARGV[1]: $!\n"; 
foreach my $w(@b) { print "$w$_\n" foreach(@a)} 

以您的兩個輸入文件作爲參數調用此腳本。例如,如果您將上述內容放在名爲「combine」的文件中並使其可執行:

./combine file1.txt file2.txt 
+0

這將完美起作用!非常感謝! – user2154651 2013-03-10 21:09:50