2013-10-22 93 views
0

我目前在合併Perl中的文件時遇到了問題。 有兩個目錄/文件夾,它們成對地包含相同的名稱和擴展名文件。 例如,在文件夾1中,我有文件1.fastq,2.fastq,....,10.fastq。 在文件夾2中,我具有完全相同的文件名1.fastq,2.fastq,....,10.fastq,但它們包含不同的信息。 我希望將這些文件具有相同名稱的合併,在開始的時候我嘗試了cat命令在Perl中合併具有相同文件名的文件

$ cat 1.fastq 1.fastq > 1.fastq 

但是,如果有太多的文件,例如1000+,我需要做的是1000+次。 我怎樣才能用perl命令自動執行它?

預先感謝您。

+2

我認爲如果您編寫shell腳本而不是使用Perl打開和關閉文件,這會更容易。 – NigoroJr

回答

6

基於Perl的解決方案如下所示。

#!/usr/bin/perl 
$source_dir = "./source"; 
$dest_dir = "./dest"; 
opendir ($source, $source_dir); 
@source_files = readdir $source; 
foreach $each_file (@source_files){ 
    if($each !~ /^(\.|\.\.)$/) { 
     open $file_h , "< $source_dir/$each_file"; 
     @contents = <$file_h>; 
     open $dest_file, ">>$dest_dir/$each_file"; 
     print $dest_file @contents; 
     @contents =(); 
    } 
} 

你也可以使用Shell腳本來做到這一點。一個典型的shell腳本將如下所示。

#!/usr/bin/sh 
source='./source' 
dest='./dest' 
for file in `ls $source` 
do 
if [ -e $dest/$file ] 
then 
    cat $source/$file $dest/$file >> $dest/$file."unique_name" 
    rm $dest/$file 
    mv $dest/$file."unique_name" $dest/$file 
else 
    cp $source/$file $dest/$file 
fi 
done 

您不能將輸入文件用作cat的輸出。

$ cat 1.fastq 1.fastq > 1.fastq 

這會導致錯誤提示「input file is output file」。

相關問題