在Perl中合并具有相同文件名的文件

时间:2013-10-22 23:45:58

标签: perl file-io fastq

我目前在合并Perl中的文件时遇到了问题。 有两个目录/文件夹,它们成对包含相同的名称和扩展名文件。 例如,在文件夹1中,我有1.fastq,2.fastq,....,10.fastq文件。 在文件夹2中,我有完全相同的文件名1.fastq,2.fastq,....,10.fastq,但它们包含不同的信息。 我想合并具有相同名称的文件,在开始时我尝试了cat命令

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

但是如果文件太多,例如1000+,我需要做1000次以上。 如何使用perl命令自动完成?

提前谢谢。

1 个答案:

答案 0 :(得分: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”。