if else 条件を使用して awk for ループの配列に awk の戻り値を格納する際に助けを求めます。
If $3 == $7
then print $9 multiplied by $4
else print $4 multiplied by (2 minus $9)
これまでのところ、次の方法で機能しています。
awk '{if ($3 == $7) print $9*$4; else print $4*(2-$9);}' file >outfile
上記のコードは、最初のデータ列 ( $9
) に対して機能します。ただし、9 から 1547 までのすべての列をループして、戻り値を含む配列を返したいと考えています。これは十分に単純なはずですが、ここでいくつかの基本的な概念を理解できないようです。
これまでのところ、実際の関数の前に、次の方法でループ数を宣言する必要があることを理解しています。
awk ' {for(i=9;i<=NF;i++)} END {if ($3 == $7) print $i*$4; そうでない場合は $4*(2-$i);}' を出力します。
ただし、配列をいつどのように宣言するかは、私 (生物学者) を超えています。どんな助けでも大歓迎です。
例:
入力 (大きなファイル.. ここでは列 1-10):
rs2070501 22A 0.0206 0.337855 rs2070501 GA 0.977 0.066
出力:
0.0210738
ここで、else ステートメントが有効になります ($3 * (2-$9)
列9だけでなく、配列9-Nthを出力するようにawkを取得する方法