2014-05-14 2 views
1

다른 디렉토리에 5 개의 파일이 있습니다. 모든 파일에서 데이터를 추출하여 새 파일로 만듭니다.perl : 배열로 여러 파일 입력

참고 : 각 파일을 배열로 입력하고 각 파일마다 for 루프를 사용하여 데이터를 추출하십시오. FILE1 내가 다섯 개 파일을 처리하기 위해 다섯 번을 위해이 일을하고

foreach (@file) 
{ 
    my @temp = split(/\t/, trim($_)); 
    push(@output, $temp[0] . "\t" . $temp[1] . "\n"); 
} 

foreach(uniq(@output)) 
{ 
    print $OUTPUTFILE $_; 
} 

을 사용하고 위해 나는 파일을 취할 루프에 대한 단일로 만들고 싶어하고, 나머지

를 처리합니다. 당신은 단지 첫 번째 두 요소에 관심이 있기 때문에

for my $file (@five_files) { 

    open my $fh, '<', $file or die "Unable to open $file: $!"; 
    my @file = <$fh>; 

    foreach (@file) { 
     my @temp = split(/\t/, trim($_)); 
     push(@output, $temp[0] . "\t" . $temp[1] . "\n"); 
    } 

    foreach(uniq(@output)) { 
     print $OUTPUTFILE $_; 
    } 
} 

: 사람이 다섯 개 파일을 반복하는, 간단

+0

고양이 파일 1 파일 2 파일 3 | –

+0

@ JohnC, 나는 고양이를 사용하고 싶지 않습니다. 그 배열에서 할 필요가 – sara

+1

그 코드를 루프에 넣을 수 있습니다. –

답변

1

그냥 외부 루프에 포장하는 방법에 도와 줄 수 @tempforeach @file 루프를 단순화 할 수있다 :

my @temp = split /\t/, trim($_), 2; 
push @output, @temp, "\n" ; 
+0

Zaid, 내 @ temp = split/\ t /, trim ($ _), 2; 첫 번째 두 개의 행 요소 만 추출하지 않고 첫 번째 두 개의 행 추출 – sara

0

당신이 가입하여 @file 배열을 병합하여 일을 단순화합니다. 그러면 목록을 나누어서 처리 할 수 ​​있습니다. 예 : 당신이 비록 당신의 파일 이름에 공백이있는 경우

!/usr/bin/perl 

my @file = ("file1\tfile3 ","file1\tfile3\tfile3 ","file2"); # Some test data. 

my $in = join "\t", @file; # Make one string. 
my @temp = split(" ", $in); # Split it on whitespace. 


# Did it work? 
foreach(@temp) 
{ 
    print "($_)\n"; # use() to see if we have any white spaces. 
} 

문제가 될 수있다!