0

我想用从我的 awk 脚本中获得的值在 Perl 中创建一个数组。然后我可以在 Perl 中对它们进行数学运算。

这是我的 Perl,它运行一个保存文本文件的程序:

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

现在我有一些 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  
}

我使用以下命令从终端运行此 awk:

./awk_program.txt saved_file.txt 

任何想法如何将这些数据从 awk 中的打印语句收集到 perl 中的数组中?

我试过的是在 perl 中运行那个 awk 脚本:

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

但是 perl 给了我错误和找不到命令,就像它认为数据是命令一样。我缺少的 awk 中是否应该有一个 STDOUT,而不是打印?

4

2 回答 2

3

它应该只是:

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

反引号告诉 perl 运行命令并返回输出。因此,您对 $unix_command_awk 的分配正在运行命令,然后qx($unix_command_awk)将输出作为新命令执行。

于 2012-09-28T04:46:38.047 回答
1

从 awk 管道到您的 perl 脚本:

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

然后从 perl 中的 stdin 读取:

while (<>) {
    # do stuff with $_
    my @cols = split(/\t/);
}
于 2012-09-28T07:38:46.550 回答