2014-01-27 2 views
0

내 perl 스크립트에 문제가 있습니다. 4 열의 input.txt 파일이 있고 두 번째 열의 각 줄에서 100을 빼고 세 번째 열의 각 줄에 100을 더하고 출력을 별도의 파일로 인쇄하려고합니다. 값을 얻을 수 있지만 한 열에 모든 값만 인쇄합니다.Perl을 사용하여 여러 열에서 산술 연산 및 출력 파일 출력

input.txt를 :

chr1 878656 878657 MACS_peak_1 
chr1 912350 912351 MACS_peak_2 
chr1 1624598 1624599 MACS_peak_3 
chr1 1677888 1677889 MACS_peak_4 

은 다음과 같습니다 그래서 내가 두 번째 열에서 100을 빼고 세 번째 열 (100)을 추가 할 :

chr1 878556 878757 
chr1 912250 912451 
chr1 1624498 1624699 
chr1 1677788 1677989 

나는 다음을 사용하고 스크립트. 산술은 괜찮지 만 화면에 인쇄 할 때마다 데이터 출력의 한 열만받습니다.

use warnings; 

unless (open(FILE, "input.txt")){ 
    print "cannot open file\n\n" ; 
    exit; 
} 

while (<FILE>) { 

    chomp($_); 

    { 
    @input = split(/\t/,$_); 
    @input1= split(/\t/,$input[1]); 
    @input2= split(/\t/,$input[2]); 
    $input1 = $input[1] - 100; 
    $input2 = $input[2] + 100; 

    { 
     print $input1,"\n"; print $input2,"\n"; 
    } 
    } 
} 

close FILE ; 

나는 awk로 그것을하는 방법을 알고 있지만 나는 이것에 아주 새로운 것을 배우려고 노력하고있다. 모든 제안과 설명은 매우 감사하게 생각합니다.

감사합니다, 해리엇

답변

2
use warnings; 
use strict; 

open my $input, '<', 'in.txt'; 

while(<$input>){ 
    my @split = split(/\s+/); 
    my $col1 = ($split[1] - 100); 
    my $col2 = ($split[2] + 100); 
    print "$split[0]\t$col1\t$col2\n" 
} 

인쇄 :

chr1 878556 878757 
chr1 912250 912451 
chr1 1624498 1624699 
chr1 1677788 1677989 
2

펄을 배우고 있기 때문에, 당신이 이해할 수있는 경우가 :) 왜 작동하는지 확인하려면이 한 줄에 봐

$ perl -lane '$F[1] -= 100; $F[2] += 100; print "@F[0,1,2]"' input.txt 

perldoc perlrun 해독에 도움이됩니다.

+0

그리고'perl -MO = Deparse ..'도 마찬가지입니다. '\ n'과'$ \\'는 두 줄의 줄 바꿈을 제공합니다. –