2017-01-15 13 views
0

私はPythonには新しく、これをbashスクリプトに埋め込むようにしています。変数呼び出し側のパイソンに保存されているがカッコpythonをbashスクリプトに埋め込みました

PERN=`echo print ($WCNO-$WCNF)/$WCNO. | python` 

私はこの割合の計算を実行したいと思います

#!/bin/bash 

while read line 
do 
    ORD=`echo $line | cut -c 1-7` 
    if [[ -r ../FASTA_SEC/COMBI_RAW/${ORD}_COMBI_RAW.fa ]] 
    then 
     touch ../Results/Log_Files/Log_${ORD}.txt 
     for ((win = 2; win < 20; win += 2)); do 
      printf 'The value of win is %d, now entereing inner loop\n' "$win" 
      for ((per = 50; per < 100; per += 2)); do 
       printf 'Value of per is %d\n' "$per" 
       WCNO=`grep -o "n\|N" ../FASTA_SEC/COMBI_RAW/${ORD}_COMBI_RAW.fa | wc -l` 
       WCNF=`grep -o "n\|N" ../Results/COMBI/${ORD}_COMBI/${ORD}_w${win}_p${per}_COMBI.fa | wc -l` 
       WCAO=`grep -o "a\|A\|g\|G\|t\|T\|c\|C" ../FASTA_SEC/COMBI_RAW/${ORD}_COMBI_RAW.fa | wc -l` 
       WCAF=`grep -o "a\|A\|g\|G\|t\|T\|c\|C" ../Results/COMBI/${ORD}_COMBI/${ORD}_w${win}_p${per}_COMBI.fa | wc -l` 
       PERN=`echo print ($WCNO-$WCNF)/$WCNO. | python` 
       echo $ORD $PERN 
      done 
     done 
    else 
     echo ${ORD}"_COMBI_RAW.fa does not exist" 
    fi 
done < ./Data_ORD.txt 

私が実行したときに、私は次の出力を得るように、トラブルを与えている:私は、次のbashシェルスクリプトを持っていますbashスクリプト:

command substitution: line 17: syntax error near unexpected token `(' 
command substitution: line 17: `echo print ($WCNO-$WCNF)/$WCNO. | python' 

bashに問題がありますか?操作の順序は、私が知る限り、Pythonでかっこで定義されています。

は、あなたがそれをしたくないとき

答えて

1

bashが(を解釈され、ありがとうございます。 Pythonに送る式を引用符で囲む必要があります。

PERN=`echo "print ($WCNO-$WCNF)/$WCNO." | python` 

あなたがやっていた思っbashの好奇心旺盛なら...

構造(...)はサブシェル内で実行するために何かを示しています。まず、bashは変数$WCNO$WCNFを補間します。それから、サブシェルでコマンドとして括弧内のものを実行しようとします。その文字列がコマンドとして同時に存在しない限り、見つかったコマンドは存在しないため、bashは文句を言います。

また、Unix.SEのthis answerも参照してください。

+0

ありがとうございました!いい説明 – Neuls

関連する問題