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 の print ステートメントから perl の配列に収集する方法はありますか?

私が試したのは、その awk スクリプトを perl で実行することです。

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 に答える