2013-07-29 5 views
-2

나는 당신에게 비교적 간단한 질문을한다. 필자는 perl 스크립트로 처리하고자하는 디렉토리에 300 개의 파일을 가지고 있습니다 (아래 그림 참조). perl의 파일 배치에서 변수와 프로세스를 사용하는 방법이 있는지 궁금합니다. 이 파일이 도움이되는 경우 파일 이름 목록이 포함 된 파일이 있습니다. 귀하의 의견을 보내 주시면 감사하겠습니다.배치 파일 처리 용 Perl 스크립트

====================================

#!/usr/bin/perl 
use strict; 
use warnings; 

open (FILE1, "001.txt") or die ("Can't open file $!"); 

while(<FILE1>){ 
     my $line = $_; 
     chomp $line; 
     if ($line =~ m/^chr/) { 
      open OUT, '>>', '001_tmp.txt'; 
      print OUT "$line\n"; 
      } 
} 
close(OUT); 
close(FILE1); 

=== ===================

설명 : 기본적으로 나는 펄 스크립트가 필요하다. 변수를 사용하는 모든 파일을 수용 할 수있는 다음 쉘 스크립트와 동일합니다.

#!/bin/bash 
if [[ $# != 1 ]] 
then 
    echo "Usage: error <input>" 
else 
    echo $# $1 
    export input=$1 
    grep "^chr" $1 > ${input}_tmp.vcf 
+4

무엇이 질문입니까? 또한, 오픈의 세 인수 버전을 사용해야합니다. – squiguy

+0

확인. 나는 3-arg 버전을 사용할 것이다. – jamie

+0

당신이 무엇을 요구하고 있는지 불분명합니다. 질문을 편집하여 명확히하십시오. – chrsblck

답변

0

그래서 당신이 원하는 당신의 while 루프는 주어진 디렉토리의 각 파일을 통해 읽습니다.

나는 다음과 같이 할 것이다.

opendirreaddir을 사용하면 파일 이름을 조작 할 수있다. 내 예제에서 나는 디렉토리를 필터링에 대해

또한

이제
opendir(my $dh, $dir) or die "$dir: $!"; 
my @files = grep { !-d $_ } readdir $dh; 
closedir $dh; 

당신이 일을 할 수있는 파일의 목록을해야합니다 ... 당신은 상관하지 않는 파일을 필터링하는 grep 볼 것 에 ...

for my $file (@files) { 
    open my $fh, "<", $file or die "$!"; 
    while(my $line = <$fh>) { 
     #TODO: stuff 
    } 
    close $fh; 
} 
+0

감사합니다. 나는 마지막으로 넣어야 만한다는 것을 제외하고는 완벽하게 작동합니다. 루프에서 벗어나기. – jamie

+0

@jamie 당신을 환영합니다. – chrsblck

0

편집 : 귀하의 태그 Windows 배치 파일을 의미하는 배치 파일을 지적했다. 그것이 당신이 의미하는 것이 아니라면 이것을 무시하십시오. :-)

이 같은

아마 뭔가 :

for /f %%x in (listoffilenames.txt) do (
    perl myperlscript.pl %%x 
) 

다음 Perl 스크립트는 다음과 같이 수정할 수 있습니다 : 배치 파일에서

#!/usr/bin/perl 
use strict; 
use warnings; 

# You may want to add a little more error handling 
# around getting the filename, etc. 
my $filename = shift or die "No filename specified."; 

open (FILE1, "<", $filename) or die ("Can't open file $!"); 

while(<FILE1>){ 
     my $line = $_; 
     chomp $line; 
     if ($line =~ m/^chr/) { 
      open OUT, '>>', "temp-$filename"; 
      print OUT "$line\n"; 
      } 
} 
close(OUT); 
close(FILE1);