我目前在合并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命令自动完成?
提前谢谢。
答案 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
”。