2013-10-22 3 views
0

현재 Perl에서 파일을 병합하는 데 문제가 있습니다. 두 개의 디렉토리/폴더가 있으며 이름과 확장명이 쌍을 이루고 있습니다. 예를 들어 폴더 1에는 1.fastq, 2.fastq, ...., 10.fastq 파일이 있습니다. 폴더 2에는 1.fastq, 2.fastq, ...., 10.fastq와 같은 파일 이름이 있지만 서로 다른 정보가 들어 있습니다. 은 내가, 내가 1000 번 수행해야합니다 1000 예를 들어, cat 명령Perl에서 동일한 파일 이름으로 파일 병합

너무 많은 파일이있다 그러나 경우
$ cat 1.fastq 1.fastq > 1.fastq 

을 시도 처음에, 같은 이름의 파일을 병합 할. perl 명령을 사용하면 어떻게 자동으로 수행 할 수 있습니까?

미리 감사드립니다.

+2

필자가 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 =(); 
    } 
} 

또한 쉘 스크립트를 사용하여이를 수행 할 수도 있습니다. 일반적인 쉘 스크립트는 아래와 같습니다.

#!/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"이됩니다.