2012-09-28 3 views
0

awk 스크립트에서 얻은 값으로 Perl로 배열을 만들고 싶습니다. 그러면 Perl에서 수학을 할 수 있습니다.awk에서 perl로 파이프 출력

여기에 텍스트 파일을 저장하는 프로그램을 운영하고 내 펄입니다 : 이제

my $unix_command_dsc = (`./program -s test.fasta saved_file.txt`); 
my $dsc_run = qx($unix_command_dsc); 

I 데이터를 텍스트 파일에 저장 한 구문 분석 일부 awk는 있습니다

#!/usr/bin/awk -f 

BEGIN{  # Initialize the values to zero. Note, done automatically also. 
    sumc4 = 0 
    sumc5 = 0 
    sumc6 = 0 
} 

/^[1-9][0-9]* residue/ {next} #Match line that begins with number and has word 'residue', skip it. 
/^[1-9]/ {      #Match line that begins with number. 

    sumc4 += $4     #Add up the values of the nth column into the variables. 
    sumc5 += $5 
    sumc6 += $6 

    print $4 "\t" $5 "\t" $6 #This will show the whole columns. 

    } 

END{ 
    print "sum H" "\t" "sum E" "\t" "sum C" 
    print sumc4 "\t" sumc5 "\t" sumc6 
} 

I을 다음 명령을 사용하여이 Awk을 터미널에서 실행하십시오.

./awk_program.txt saved_file.txt 

p에서이 데이터를 수집하는 방법에 대한 아이디어 awk의 rint 문을 perl의 배열로?

my $unix_command_awk = (`./awk_program.txt saved_file.txt`); 
my $awk_run = qx($unix_command_awk); 

그러나 데이터가 명령입니다 생각처럼 펄은 나에게 오류를 제공하고 찾을 수없는 명령 : 나는 무엇을 시도했다

는 펄에서 그 awk 스크립트를 실행하는 것입니다. 내가 인쇄하지 않고 awk에 STDOUT이 있어야합니까?

+0

은 그냥 펄의 논리를 재 구현하는 것이 더 간단하지 않을까요. 대략 awk 코드와 같은 양의 코드를 취할 것이므로 외부 프로세스를 호출하고 나중에 결과를 파싱 할 필요가 없습니다. – pmakholm

+0

그래서 awk에서 그 결과를 파싱해야하지만 결과를 파싱해야합니다. awk [value1, value2 ...]에서 목록을 만들고 그 목록을 perl에서 사용할 수있는 방법이 있습니까? – chimpsarehungry

답변

3

는 그냥해야한다 :

my $awk_run = `./awk_program.txt saved_file.txt`; 

역 따옴표는 명령을 실행하고 출력을 반환 펄 말한다. 그래서 $ unix_command_awk에 할당하면 명령이 실행되고, 그 다음에 qx($unix_command_awk)이 출력을 새로운 명령으로 실행합니다. 당신의 펄 스크립트를 AWK에서

+0

그래, 방금 $ awk_run을 @array 변수로 만들었고 내가 원하는 것을 얻었습니다. – chimpsarehungry

1

파이프 :

./awk_program file.txt | perl perl-script.pl 

그런 다음 펄 내부 표준 입력에서 읽어

while (<>) { 
    # do stuff with $_ 
    my @cols = split(/\t/); 
} 
+0

죄송합니다. 제 휴대 전화로 코딩하기가 어려웠습니다. 내가 편집 할게. – RobEarl

+0

sh : fork : 리소스를 일시적으로 사용할 수 없습니다. – chimpsarehungry