0

我目前在 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 命令自动执行此操作?

先感谢您。

4

1 回答 1

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”。

于 2013-10-23T00:38:30.757 回答